|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、时钟发生器clkgen利用外来的时钟信号clk生成一系列时钟信号,clk1、fetch、alu_clk,并送往cpu的其他部件。: h' y( E" B: W; ^+ c6 T' i" @
2、其中,fetch是外来时钟clk的8分频信号。
/ V+ |; i2 f) X8 ?6 R3、clk1信号用作指令寄存器的时钟信号。
) _* G) K1 y V8 A4 k4、alu_clk则用于触发算术逻辑运算单元(8位)。" O J9 ]# O; E7 R, a
( |3 g/ j& E: w7 ^5 y按以上要求用verilog写出时钟发生器。: I6 g. ~5 E. g! w0 v9 c
/ Z7 u5 J! G) s+ N以下是我写的,但是呢,其中的alu_clk不知道要怎么写。请教大神,还有,如果代码写的不是很规范,写的不是很简洁,请帮改下,或许你的一句话就会帮我打开一扇窗户,让我更加了解verilog。谢谢!{:soso__187047450382421961_3:} . A! m) B2 R9 S& f- O5 D7 u& u
module clk_gen(clk,rst,fetch,clk1,alu_clk);7 U/ s. n9 e$ k. V$ K. c3 \6 f$ @' |
input clk,rst;
4 a: d4 A! z+ M+ w2 N- u6 U% t; Doutput fetch; //clk的8分频,用来控制地址多路器,输出指令地址与数据地址( R8 E% ~: s8 j1 b. u
output clk1; //控制指令寄存器,累加器,状态控制器的时钟! n! N* e9 k }4 I( N5 X
output alu_clk; //控制算术逻辑运算单元的时钟
- f- O0 d! V! k+ M) P! yreg [2:0] count;* n2 `: ?7 a" n$ _
reg fetch;! U3 [# A- S# h" l* @, @! Q/ `; U+ q) F/ Y o
reg alu_clk;
% F. @8 q' {4 r, c+ }7 v" a4 r' A8 F//reg [2:0] N;6 H: r& t4 S7 i5 |4 i% j2 ?' [
//reg clk1;& r! C N& v* E5 U8 N% N
assign clk1 = ~clk; //原输入,原输出
& A6 J% _% P4 rparameter N=8; //对clk进行八分频处理之后赋值给fetch
! H G; Z- S% N$ H& Galways @ (posedge clk)- f" B2 j0 k }9 d b
begin3 x) Y- y" J" a& Y
if (rst)0 l8 G5 q% m* {0 T
begin
. h% s8 L: a8 g fetch <= 1'b0; , p7 j3 J) Z% o4 _
//clk1 <= 1'b0;9 o7 i$ d" U, @& m8 g8 u
count <= 1'b0;
) s( I0 y6 d3 E alu_clk <= 1'b0;
( t0 A' t8 X' i* I$ P6 S' P( U/ P! u* ` end
7 c6 r2 O# m& x9 i! l1 k else if(count<=(N/2-1))0 {* o$ g9 Q G8 Y" y
count <= count + 1;' e8 h6 H3 ]9 u6 l- i
else
8 }8 l' B( c& P+ h( h, z' u begin
4 B+ C d" ~! g$ w count <= 1'b0;( Y5 v3 u$ G. R
fetch <= ~clk;
/ I* ]5 |0 o3 J, J end7 O8 A5 t1 q7 o: j a% w
end: g. C1 T2 s1 X3 ~* J5 x
5 s4 G3 |3 K: Z# {( f
endmodule |
|