|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、时钟发生器clkgen利用外来的时钟信号clk生成一系列时钟信号,clk1、fetch、alu_clk,并送往cpu的其他部件。
2 C- g: k x8 ?. [1 o2、其中,fetch是外来时钟clk的8分频信号。
9 j4 p, s' F( r. d* `' I3、clk1信号用作指令寄存器的时钟信号。9 ?" b* g; Y+ b7 b
4、alu_clk则用于触发算术逻辑运算单元(8位)。& U( ~* ? S2 k4 O* L1 w# a
$ A$ L4 N; x! ~, F }5 t
按以上要求用verilog写出时钟发生器。( h& s' F2 a! {8 Z: R+ ]6 U
* E6 J y2 a3 q3 }以下是我写的,但是呢,其中的alu_clk不知道要怎么写。请教大神,还有,如果代码写的不是很规范,写的不是很简洁,请帮改下,或许你的一句话就会帮我打开一扇窗户,让我更加了解verilog。谢谢!{:soso__187047450382421961_3:} 4 H; H9 p+ ? ~% s
module clk_gen(clk,rst,fetch,clk1,alu_clk);
6 E9 p" [" P5 i0 Oinput clk,rst;. W! d- X* h6 a+ C% F7 J4 P! u: R
output fetch; //clk的8分频,用来控制地址多路器,输出指令地址与数据地址
% A4 J+ b7 L9 d9 P; y" N* @output clk1; //控制指令寄存器,累加器,状态控制器的时钟) r) q& V. G! L+ Z# l" `
output alu_clk; //控制算术逻辑运算单元的时钟! _" [9 I& C$ m/ a8 P% E. L
reg [2:0] count;
6 d* t/ o, J- V% c. v& Q- A) t s6 Zreg fetch;% ]* [ _5 _) t1 }# q
reg alu_clk;% j: s- x# L% l' a
//reg [2:0] N;% K1 V" A8 d/ {- K3 p6 b3 i
//reg clk1;. L F I% k: ^& Q- ]# j/ t3 B' W7 X
assign clk1 = ~clk; //原输入,原输出' q: p* D2 k0 U5 H$ d. V
parameter N=8; //对clk进行八分频处理之后赋值给fetch
% h8 s- l) T' M6 t# Z6 h" h+ Aalways @ (posedge clk)+ Y( |" A3 o k
begin( a1 }6 F! d# L: }% ]: ]4 l/ b
if (rst)) ]$ f& I2 C2 @. i3 W4 o4 {
begin3 @! Q6 f1 i5 k: ]8 O, Y# e
fetch <= 1'b0; & V, a3 m" l2 y* q( r( q
//clk1 <= 1'b0;
+ k& [# }# I0 N3 H L count <= 1'b0;3 m' K- t S3 ~6 ^% G/ m
alu_clk <= 1'b0;
: ?! ^! T$ X1 s/ w9 `2 n: i end
' H- T' `! T/ V else if(count<=(N/2-1))
2 l2 ]* `1 C# J2 h. N0 ]: @ count <= count + 1;$ |- g2 W8 Q' J5 {4 e8 r
else+ W( b) L$ n& M- @+ C- O1 @# q' T
begin ! F' K! ` e8 y9 e0 J
count <= 1'b0;
4 a4 {! \% ]& b a fetch <= ~clk;
, B/ h: y3 I! C end+ ~* C- S' J" B& p# |5 V6 r
end! Y9 |* P- Q9 j# V$ E
) J0 m2 m" @0 y6 t6 l8 Lendmodule |
|