|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、时钟发生器clkgen利用外来的时钟信号clk生成一系列时钟信号,clk1、fetch、alu_clk,并送往cpu的其他部件。
* r. ^+ j+ {8 A, H2、其中,fetch是外来时钟clk的8分频信号。
E0 o9 p) V" x" }* W3、clk1信号用作指令寄存器的时钟信号。
$ @$ a |% G/ C/ u/ P5 {8 M& s; `4、alu_clk则用于触发算术逻辑运算单元(8位)。
5 J4 J0 t0 t& O# F6 `/ j' H- z1 H0 e \0 m* H" C" H, R
按以上要求用verilog写出时钟发生器。$ x+ ] _5 m/ J
( A; c! ^( S, |8 U# Q3 f! ]6 Q以下是我写的,但是呢,其中的alu_clk不知道要怎么写。请教大神,还有,如果代码写的不是很规范,写的不是很简洁,请帮改下,或许你的一句话就会帮我打开一扇窗户,让我更加了解verilog。谢谢!{:soso__187047450382421961_3:} ; ^. H n) y) n- N
module clk_gen(clk,rst,fetch,clk1,alu_clk);
9 J; W; n- i" s* k# Linput clk,rst;9 j; o1 l; ?7 R; [+ f
output fetch; //clk的8分频,用来控制地址多路器,输出指令地址与数据地址
1 H" D( w |4 B) N8 n3 R4 G8 E' boutput clk1; //控制指令寄存器,累加器,状态控制器的时钟
+ x% p% h8 @6 z, X. F+ D! M4 Y7 Z- loutput alu_clk; //控制算术逻辑运算单元的时钟
1 p; |/ l9 j$ J. L# E: Vreg [2:0] count;
! T& {4 ?' s1 h# U% _reg fetch;
% o+ ]' a3 ] I, E" sreg alu_clk;/ O$ _! X- {: ?% J( i8 ]
//reg [2:0] N;' z4 Z2 A% Z5 d& Q8 \
//reg clk1;5 S+ ~( d% S9 U, ?
assign clk1 = ~clk; //原输入,原输出
6 e q" A0 p6 K Y6 {) Rparameter N=8; //对clk进行八分频处理之后赋值给fetch- j2 `- w+ n- n+ ? v; F% e
always @ (posedge clk)$ z) J2 n. q( Z3 W
begin0 E& M% t& P; @8 _1 A7 Y" ~
if (rst)
& b% I4 o3 v. y I4 e/ J begin
8 ?9 ~+ x. b( o S fetch <= 1'b0; 5 ^2 q* m. ~3 L6 v+ F
//clk1 <= 1'b0;8 Z2 X- ^6 F! @+ w
count <= 1'b0;
) W. p3 k, d+ a: r( y& p* E alu_clk <= 1'b0;
" C+ g0 h& O- v f( D; P) u end' G. l9 m! K; j
else if(count<=(N/2-1))
6 b S; L$ E$ h& A5 T0 C count <= count + 1;6 f: d4 _1 j W
else
$ U4 S4 l/ D% l3 t begin
$ z' ^+ {7 M8 P- |3 p count <= 1'b0;
% _9 \- I4 Q; @4 I fetch <= ~clk;
% j a s1 m }1 L! P" i end @! F8 [- l- r) U: k, r. s3 G; N
end
0 p- _5 A1 I, _( c8 f% m0 b
* }, s7 P( r6 Zendmodule |
|