|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、时钟发生器clkgen利用外来的时钟信号clk生成一系列时钟信号,clk1、fetch、alu_clk,并送往cpu的其他部件。
8 h) W# q9 S- V/ n# m2、其中,fetch是外来时钟clk的8分频信号。
) j, c o" J# _% l$ t3、clk1信号用作指令寄存器的时钟信号。
$ j7 |8 F! Y2 C! Z. g: K1 ]4、alu_clk则用于触发算术逻辑运算单元(8位)。
* Z' x- H# t* Q2 N- @" L
7 g+ w0 h. \( d: J x# b按以上要求用verilog写出时钟发生器。* ?% x% S( o1 i v3 E
8 I3 q) J/ _5 b
以下是我写的,但是呢,其中的alu_clk不知道要怎么写。请教大神,还有,如果代码写的不是很规范,写的不是很简洁,请帮改下,或许你的一句话就会帮我打开一扇窗户,让我更加了解verilog。谢谢!{:soso__187047450382421961_3:} ( m* s. I$ r2 e D0 J
module clk_gen(clk,rst,fetch,clk1,alu_clk);. D( A; @. ]0 b O- @6 i' x9 A
input clk,rst;: T/ H$ h L) }
output fetch; //clk的8分频,用来控制地址多路器,输出指令地址与数据地址
6 s" [7 P( ~! l9 D! Voutput clk1; //控制指令寄存器,累加器,状态控制器的时钟
r& g$ L( ]. y3 d6 q$ X/ eoutput alu_clk; //控制算术逻辑运算单元的时钟7 z$ y ]% x, l7 D! g
reg [2:0] count;3 B+ k! K7 O& U) q1 P( T: h
reg fetch;
: ^7 Z8 t" ]$ J2 G$ `* areg alu_clk;! y; E" b4 r0 e' i1 Z$ y+ |7 h* _8 @
//reg [2:0] N;
! ^# B9 Y5 s; _" _; y( e4 J3 Y//reg clk1;! |6 _# M% G7 \* N
assign clk1 = ~clk; //原输入,原输出
& t5 ?; b3 Q( B: i; }parameter N=8; //对clk进行八分频处理之后赋值给fetch3 B; q. c+ V% y+ |
always @ (posedge clk), c) c `8 G1 L6 Z Z) U
begin
& P# E! R) x/ S5 N1 c/ i1 p: E if (rst)4 A. Q8 }4 m" H1 L
begin4 g8 g S8 M- j2 C: ?8 }3 _
fetch <= 1'b0; ' F, }" P" U% J
//clk1 <= 1'b0;6 O* J7 ]* R. @. c" W( D. s0 x/ n
count <= 1'b0;2 R: |) f: U! ]' L+ }
alu_clk <= 1'b0;
$ Q* a8 c+ E& {# [ end
. ^9 Z, a) Q& L; q9 X `. ]; I else if(count<=(N/2-1))* N; N7 t; Q0 S# G
count <= count + 1;8 B6 N5 a2 f4 R+ W# b6 P4 H
else# r5 x2 g: Y x! x. l T! l
begin / D7 ^+ ?$ t4 O. X5 \, [
count <= 1'b0;
9 S7 ~" _6 m" {: Q& C fetch <= ~clk;
- n/ [0 l: K5 X4 X, ?# b0 p9 k end0 |; S) I3 Y. e2 M1 S
end% B; |: R' T+ B! j3 H- y* D5 w
! L: Z- W0 t& J# X6 W: h7 W3 T8 Yendmodule |
|