EDA365电子工程师网
标题:
时钟发生器
[打印本页]
作者:
微笑的记忆
时间:
2012-9-21 16:20
标题:
时钟发生器
1、时钟发生器clkgen利用外来的时钟信号clk生成一系列时钟信号,clk1、fetch、alu_clk,并送往cpu的其他部件。
" E% H8 D* L* c# J) F
2、其中,fetch是外来时钟clk的8分频信号。
, F/ u f( L3 x( F
3、clk1信号用作指令寄存器的时钟信号。
' A. Z) d/ L W# P, W% t# K( ]
4、alu_clk则用于触发算术逻辑运算单元(8位)。
9 l8 g. F: k H! n8 |' b8 }
2 M/ j4 w$ Q. U# z" M5 x
按以上要求用verilog写出时钟发生器。
$ m' I& V$ G0 c f* b" ]# X
% _7 ]( y5 o% Z z9 ?
以下是我写的,但是呢,其中的alu_clk不知道要怎么写。请教大神,还有,如果代码写的不是很规范,写的不是很简洁,请帮改下,或许你的一句话就会帮我打开一扇窗户,让我更加了解verilog。谢谢!{:soso__187047450382421961_3:}
6 M9 P9 `! i5 o9 ^' W
module clk_gen(clk,rst,fetch,clk1,alu_clk);
# L* y4 i4 y7 }" K0 n
input clk,rst;
. _( T1 o" Y a* x
output fetch; //clk的8分频,用来控制地址多路器,输出指令地址与数据地址
9 h d0 [5 R! ]4 Y- r- Q
output clk1; //控制指令寄存器,累加器,状态控制器的时钟
7 w9 j0 ^: n0 W! Y* }6 K
output alu_clk; //控制算术逻辑运算单元的时钟
! w6 f e; `- y% q! T1 W
reg [2:0] count;
! F# a9 y! D9 l" R2 U% R
reg fetch;
! I% o/ a r- o" R' b* ~* k L6 x; {
reg alu_clk;
7 y( H* |8 C" i# S9 w( `# h
//reg [2:0] N;
% T3 N) U' i$ a/ a& }
//reg clk1;
$ H- g6 [' F4 c: y
assign clk1 = ~clk; //原输入,原输出
; ]( r8 N$ U2 \/ i8 J h
parameter N=8; //对clk进行八分频处理之后赋值给fetch
2 s" y( V/ f {2 {2 D
always @ (posedge clk)
8 S& l7 ]* h/ ?2 b: f5 C7 D
begin
8 Q0 `' @2 o1 Q4 f0 d% I
if (rst)
! U( d: ` H. \ ]4 x* w# Y
begin
- A* e1 ~) r( B6 Q# _4 N! m7 z$ p
fetch <= 1'b0;
4 m4 E9 a' v7 |9 Q9 n; r/ @
//clk1 <= 1'b0;
) }. A8 ~1 o) p7 H2 i: d
count <= 1'b0;
. l# o& Z7 T" ~8 ]4 b E; ?
alu_clk <= 1'b0;
% c$ Z' w" _" x, n* i2 P
end
8 r2 L$ z( Q8 C5 E" G2 _
else if(count<=(N/2-1))
, S. b6 \6 T/ ?6 ^6 T
count <= count + 1;
8 z# ~8 l8 c' `+ q: r6 O- R5 k8 y
else
1 P$ k2 |$ F/ r2 D. p
begin
, ^) s( _4 A5 E- l% A/ I) v- K, A
count <= 1'b0;
; R$ j' g' y; r9 d3 s
fetch <= ~clk;
; [+ {/ S1 o! B+ j" D7 q
end
9 Q/ {0 |+ v4 @; Z/ I0 C- L
end
9 }& S" @4 T2 W% U- y" ]/ C, H
( i; @ d4 I6 z
endmodule
欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/)
Powered by Discuz! X3.2