|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、时钟发生器clkgen利用外来的时钟信号clk生成一系列时钟信号,clk1、fetch、alu_clk,并送往cpu的其他部件。1 S8 R0 e- ?9 |; d1 D* A
2、其中,fetch是外来时钟clk的8分频信号。
2 Q' _ D8 h3 a6 y9 F! n3、clk1信号用作指令寄存器的时钟信号。
* r J, X! I2 ?+ T! S- J4、alu_clk则用于触发算术逻辑运算单元(8位)。
) l# n: k ^/ a& u. n6 Y! o F7 u" f+ L0 Y- {
按以上要求用verilog写出时钟发生器。
# C: v: f6 C; ~( L1 X4 k
$ ~* U9 ^( h4 {以下是我写的,但是呢,其中的alu_clk不知道要怎么写。请教大神,还有,如果代码写的不是很规范,写的不是很简洁,请帮改下,或许你的一句话就会帮我打开一扇窗户,让我更加了解verilog。谢谢!{:soso__187047450382421961_3:} . p5 k$ |1 j% Z& v0 f) G0 |5 L2 v
module clk_gen(clk,rst,fetch,clk1,alu_clk);2 U/ A: H) k- g }. m
input clk,rst;
3 G$ v0 a% `, F/ \" I! Koutput fetch; //clk的8分频,用来控制地址多路器,输出指令地址与数据地址: [) f' x% w0 p) c; M- A5 `) K
output clk1; //控制指令寄存器,累加器,状态控制器的时钟
+ Y% B2 K( n) Y; ?* W" c1 aoutput alu_clk; //控制算术逻辑运算单元的时钟
+ a$ O7 R, u5 h% F7 {, o3 lreg [2:0] count;# z3 z: g) t# K, z) s: n+ ]( S- {
reg fetch;0 |& N9 g7 c3 ]1 F' ^$ f/ e n- z7 y
reg alu_clk;
/ ~3 I) s' G& N//reg [2:0] N;
! D; `/ m9 m8 h/ V//reg clk1;
7 P5 e6 h% s% B4 U6 ^ z' bassign clk1 = ~clk; //原输入,原输出9 i- Y8 M; Y4 c5 @; K8 ~; J% P% _
parameter N=8; //对clk进行八分频处理之后赋值给fetch
: C3 }) w+ h$ K$ t% [always @ (posedge clk)
: n N B& e7 {# s+ Y8 B% i$ n begin! p: Z; r8 _3 S& H* ]0 O7 t
if (rst)
& Q0 J, j0 S/ r& N# ~ begin
' b1 O# p E2 g% }6 |, _ fetch <= 1'b0; g! @' q. H, R3 k0 @ [1 s
//clk1 <= 1'b0;5 m1 O& C+ V( H( ?' m
count <= 1'b0;
4 R, w1 L' l/ ~; O6 T: s" ^ alu_clk <= 1'b0;
9 n) }6 O8 l# ^8 l7 \- e end
* W) F2 w2 c: ]( C: ? else if(count<=(N/2-1))
3 ~, Z1 h( t& c' _5 v. j/ Y8 Y count <= count + 1;0 X5 B$ u( v; x5 C9 B8 d, E
else
' M. W6 [/ [: U5 R: ` begin + K2 j3 T: i8 Z) {/ t& ? R
count <= 1'b0;
6 E) O! C' ?1 R. L! H# H fetch <= ~clk;2 ~. g1 w: w5 A$ ]$ V1 A0 [
end* \) P* P% E6 @+ z, A( S
end1 c+ g6 ?! d& }9 T. c( P( {
& O+ y# f. @7 O% Z) A2 V% Y
endmodule |
|