|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、时钟发生器clkgen利用外来的时钟信号clk生成一系列时钟信号,clk1、fetch、alu_clk,并送往cpu的其他部件。
3 Y/ j# k1 k6 j6 c. u- S2、其中,fetch是外来时钟clk的8分频信号。6 X% K7 \; _9 {( w2 Y- x1 g
3、clk1信号用作指令寄存器的时钟信号。( R" A% S& l, v- ~4 Z! a. W* N
4、alu_clk则用于触发算术逻辑运算单元(8位)。
* s8 t0 F8 A$ T4 _5 z( w: A9 p: N$ W
按以上要求用verilog写出时钟发生器。: V- Y& t- o$ P) q- M
8 b% \% X8 B: U, ?( B6 O8 m! t以下是我写的,但是呢,其中的alu_clk不知道要怎么写。请教大神,还有,如果代码写的不是很规范,写的不是很简洁,请帮改下,或许你的一句话就会帮我打开一扇窗户,让我更加了解verilog。谢谢!{:soso__187047450382421961_3:}
- [9 t- {, X+ Jmodule clk_gen(clk,rst,fetch,clk1,alu_clk);$ P* J9 w' I, g8 }/ O+ s
input clk,rst;1 R4 m: ?% f0 l( L
output fetch; //clk的8分频,用来控制地址多路器,输出指令地址与数据地址0 l7 o% U( b. M! j* `
output clk1; //控制指令寄存器,累加器,状态控制器的时钟
' O% W o& D: K7 ^output alu_clk; //控制算术逻辑运算单元的时钟. o' d) w, t4 Y/ S9 y) g
reg [2:0] count;
/ {3 _1 H2 P1 treg fetch;
* b# ~! ^( E1 zreg alu_clk;7 e \/ J+ T! |5 q I) x3 M) }
//reg [2:0] N;4 A, c' q, d! n7 v9 r& h8 i) b
//reg clk1;
: t7 Z$ O ^, G# eassign clk1 = ~clk; //原输入,原输出 f& h* ^. V2 R; n( M" z
parameter N=8; //对clk进行八分频处理之后赋值给fetch
1 `5 i, c+ Q( I l* Calways @ (posedge clk)4 H1 X; z$ e z$ C, k, [
begin0 J# f+ X6 w. `; j% v
if (rst)6 S- J1 o8 K+ E6 I0 @. t! O
begin
9 t, E+ T4 s9 j! G1 X fetch <= 1'b0;
% V4 w1 @; T: G1 I //clk1 <= 1'b0;
" C7 g" P/ j6 t" u3 D0 t( c count <= 1'b0;
* N, S3 D* J0 Q alu_clk <= 1'b0;
4 Y+ x5 O/ B- \$ e6 V end9 T$ L: m# U) t, M( p8 i& `+ V
else if(count<=(N/2-1))2 ]/ u, x2 B- Q3 x5 ^& ?! }' t7 W
count <= count + 1;
$ O) W+ e% J2 ?, j2 n. h else
! Q9 m9 k% B, V7 F begin ) ^6 G5 Y% j* b. T0 i
count <= 1'b0;. O; b& ` e$ g; N7 g, K2 p
fetch <= ~clk;
8 s7 R) l+ { H end
t: z) F+ S) a( y% t; z* x end% K! Y) `$ ^6 Y$ u
9 z: \' ^, h; E* g- u! k2 Uendmodule |
|