|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、时钟发生器clkgen利用外来的时钟信号clk生成一系列时钟信号,clk1、fetch、alu_clk,并送往cpu的其他部件。* l" u& q V' q. A3 d: ]4 j! T
2、其中,fetch是外来时钟clk的8分频信号。7 e4 b/ A5 z' _6 r8 Z$ M8 F
3、clk1信号用作指令寄存器的时钟信号。
& B" ?) x0 H5 ^# ]! F$ ]4、alu_clk则用于触发算术逻辑运算单元(8位)。
, u: P' u4 D: G- ^- q* t5 L0 Y/ L K) `2 j4 c, P
按以上要求用verilog写出时钟发生器。$ x7 C7 H6 q/ ?; G# E1 g
' b- R& Y* ~+ M9 ]- R. H: `以下是我写的,但是呢,其中的alu_clk不知道要怎么写。请教大神,还有,如果代码写的不是很规范,写的不是很简洁,请帮改下,或许你的一句话就会帮我打开一扇窗户,让我更加了解verilog。谢谢!{:soso__187047450382421961_3:} # _% \! |% q+ L k. H
module clk_gen(clk,rst,fetch,clk1,alu_clk);
, F1 H5 O* C( H* H' |% n+ S2 V" X- G. b% {input clk,rst;) |7 T1 {8 J( c; n3 P6 C& r
output fetch; //clk的8分频,用来控制地址多路器,输出指令地址与数据地址; W, e% x4 n" F6 {: ]
output clk1; //控制指令寄存器,累加器,状态控制器的时钟
2 }( ]2 E9 V* V$ loutput alu_clk; //控制算术逻辑运算单元的时钟9 E. A K1 x c/ ?0 H$ k" o1 ]
reg [2:0] count;
% i0 d0 Y3 C) R4 F) lreg fetch;, t' Z% |! E3 b% S+ r u
reg alu_clk;6 I1 ?3 Y# c) ~ _% e+ o5 I( R' `
//reg [2:0] N;8 a' h" E' `) ]# p* ~
//reg clk1;
E0 {" n. C2 sassign clk1 = ~clk; //原输入,原输出
& s, Y: u8 Y- Q" k1 R) Zparameter N=8; //对clk进行八分频处理之后赋值给fetch7 M6 p# s" m4 T, z2 F; F) t/ [
always @ (posedge clk)
9 o3 s3 c" }4 R5 O( W$ @ begin
4 e( [7 i9 l0 u8 C* k2 H3 ^) _ if (rst)
% k! a3 D! g: p P! H- a begin
+ i; J( _& o' ]- L) X! v fetch <= 1'b0;
, \7 Z P, F& h* A9 y. N //clk1 <= 1'b0;( {! w2 v, h; N0 x
count <= 1'b0; O9 J5 _2 y9 `4 x* |* h# ]2 L1 o6 k5 s
alu_clk <= 1'b0; x1 v7 ?* _: G- i, [0 A9 I
end
+ Q8 w7 p6 {! b0 @: F else if(count<=(N/2-1))
% |5 K" B$ L3 h% Y% p1 f; v count <= count + 1;
b) c5 k0 ]+ t' l, I else( E* |# G( p4 x
begin
5 [- I: R B- \$ R7 `* A' _, r1 P count <= 1'b0;
B. d* o) D c& | fetch <= ~clk;4 C1 [2 x: C* W# I1 H
end; C8 z4 O6 L$ ]! ]1 Z
end- J; C: T+ B+ l3 M
8 y* f0 E t A) I% C
endmodule |
|