|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、时钟发生器clkgen利用外来的时钟信号clk生成一系列时钟信号,clk1、fetch、alu_clk,并送往cpu的其他部件。, A% B, R$ o' ~3 c9 _" x/ Z- a: p' e7 M
2、其中,fetch是外来时钟clk的8分频信号。2 Q" H9 h$ N* h# O3 s+ a9 i
3、clk1信号用作指令寄存器的时钟信号。5 r" a" ?: l' J" Q/ a. {
4、alu_clk则用于触发算术逻辑运算单元(8位)。 s. W( O3 l" z$ |' g* H% D
5 ^8 \, e3 R0 j. {1 k
按以上要求用verilog写出时钟发生器。
, V% ]" |9 Z2 Q* f
0 U I8 P5 T6 }7 @以下是我写的,但是呢,其中的alu_clk不知道要怎么写。请教大神,还有,如果代码写的不是很规范,写的不是很简洁,请帮改下,或许你的一句话就会帮我打开一扇窗户,让我更加了解verilog。谢谢!{:soso__187047450382421961_3:}
+ c% y V4 k* a `. N- Cmodule clk_gen(clk,rst,fetch,clk1,alu_clk);
# S+ L4 _6 Q4 B, M- J4 Dinput clk,rst;0 h$ V7 L0 g0 \0 _+ k4 H
output fetch; //clk的8分频,用来控制地址多路器,输出指令地址与数据地址
6 Y& s( m5 s) V, Q6 _6 v' Routput clk1; //控制指令寄存器,累加器,状态控制器的时钟
5 |4 q4 [, b6 z) t5 k/ |; k/ koutput alu_clk; //控制算术逻辑运算单元的时钟; }/ B/ x# ]" M1 T7 v! d9 |
reg [2:0] count;
2 h, ~4 \- |' i* breg fetch;
+ ~; ^! D$ p+ p7 Xreg alu_clk;3 L; C% P! V1 n
//reg [2:0] N;
+ B2 f( K' F- Y& z2 r2 {$ ^//reg clk1;( L# Q7 W. i$ U$ x; d0 F6 C
assign clk1 = ~clk; //原输入,原输出
: ]. W2 ?# x( ^' q# g9 C* e- C. F4 ?parameter N=8; //对clk进行八分频处理之后赋值给fetch+ f' r4 o0 }: R. s! b* N! e" | h
always @ (posedge clk)
1 D6 y3 O' ?5 k8 x* J begin
3 m1 _* c8 z, a6 y' e7 j if (rst)! H- D; g/ e# }% J) l- F
begin
3 D* S$ G9 l3 j: x9 W" [, u fetch <= 1'b0;
( d$ M, H' A' t) W5 Y //clk1 <= 1'b0;3 N3 m6 o! x- F8 z# T
count <= 1'b0;
0 m" A8 [7 ^, U& n8 a alu_clk <= 1'b0;
2 s( }" c4 w/ i, | end
' T9 n3 ~1 n! `- J( H! k else if(count<=(N/2-1))
x) h3 O/ r2 h# F% d' h count <= count + 1;, `( G& @6 @7 _' \
else i7 {0 Y5 e) n, W. R: P1 P
begin $ m2 H9 t1 y ]( l; i
count <= 1'b0;' t& G6 Y5 q: S# a/ m5 t
fetch <= ~clk;6 j7 I- N& @% Z1 Z" x: j
end
3 J0 E* `" n* j" t \2 l+ ] end. j' X/ L3 M/ k+ {
) @! ?5 C6 H: pendmodule |
|