|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、时钟发生器clkgen利用外来的时钟信号clk生成一系列时钟信号,clk1、fetch、alu_clk,并送往cpu的其他部件。+ o. B6 E% W, G5 Q: |2 Y5 e
2、其中,fetch是外来时钟clk的8分频信号。: [4 M* s8 B% H1 h' @! l6 M
3、clk1信号用作指令寄存器的时钟信号。2 c2 W6 T8 @( }
4、alu_clk则用于触发算术逻辑运算单元(8位)。; @: w9 k; ]$ C
. s5 w4 n7 \: j9 S" l按以上要求用verilog写出时钟发生器。
" T7 _6 r. e9 z& C% y; q- Z9 I
1 ]; H+ k# N" x0 s- X) l/ B以下是我写的,但是呢,其中的alu_clk不知道要怎么写。请教大神,还有,如果代码写的不是很规范,写的不是很简洁,请帮改下,或许你的一句话就会帮我打开一扇窗户,让我更加了解verilog。谢谢!{:soso__187047450382421961_3:} . B5 y8 [- _. ?/ N' I
module clk_gen(clk,rst,fetch,clk1,alu_clk);
! f2 j n5 O! L: @/ [input clk,rst;$ S0 }0 D, q: u6 s
output fetch; //clk的8分频,用来控制地址多路器,输出指令地址与数据地址2 N$ i6 ^# f( }& ?8 z6 K( B/ D
output clk1; //控制指令寄存器,累加器,状态控制器的时钟9 d- z. m* I: M. c8 J( U+ ?3 M5 s& z) B
output alu_clk; //控制算术逻辑运算单元的时钟
0 J: P2 D8 J& m( V2 S1 {reg [2:0] count;7 P u, Z2 a0 n
reg fetch;
, v5 d8 N9 [( ?' Q7 F9 F; s9 ^2 Breg alu_clk;
! _$ [2 }& I, Z$ c) V |! z//reg [2:0] N;8 v, q0 Y" z1 Z3 n9 w- @9 }
//reg clk1;
* S! q4 F! C. w+ F2 h3 ?1 L. a7 w. Passign clk1 = ~clk; //原输入,原输出! z- M+ Q, ?6 W- m7 f) D& ~9 I
parameter N=8; //对clk进行八分频处理之后赋值给fetch( J7 u4 w. `+ ]+ S1 U; g' ?
always @ (posedge clk)
% V8 v3 w9 [5 z: D begin. ~7 [8 H& [1 o' k+ T) |0 q7 h
if (rst)
- w% K8 v; _, { begin# S% i: O; ]9 x! H7 Z; | \
fetch <= 1'b0; ) F3 e5 g: k9 s# @
//clk1 <= 1'b0;3 `4 T- B9 i `0 |
count <= 1'b0;
; o4 V' \" a7 g# @ E' a! } alu_clk <= 1'b0;1 D2 q' Y8 H, }6 I. j
end
9 N2 J% B8 S. i, X G1 j else if(count<=(N/2-1))
2 u4 ^9 T3 N7 M* g6 S* J$ ~ count <= count + 1;
4 J; _- M" Z) E else
) d) V; ~7 i% Q" x; E1 d begin ; e8 o: n2 J% ?/ X' ~' S5 r! v
count <= 1'b0;
, l( _0 n, {% F/ l% Z fetch <= ~clk;
3 u! R$ H7 D: e2 B8 | end" \$ O7 x/ w( y: y3 q/ R2 [
end6 r* A$ P/ v/ I, N) f7 U
9 H( F: Y7 m% t9 Lendmodule |
|