作者pikachu2005 (Pikachu)
看板Electronics
标题[问题] verilog 计时器要如何停止
时间Fri Dec 31 18:09:04 2010
请问各位,我在写ㄧ个计数器的程式~
input:clk1 clk2 reset
output:out3
动作是
有两个方波pulse输入,分别是clk1跟clk2
当侦测reset为负缘时,就把计时的值清除为0
reset放开时,计时器同时开始对f1与f2计数~
当f1值计数到5次时,就把f2值丢给out3输出并停止计数(out3就不会在变)
当下一次按下reset时~整个电路在重新计时~
我写的程式如下:
///////////////////////////////////////////////////////////////////
module counter1(reset,clk1,clk2,out3);
input reset,clk1,clk2;
output [8:0] out3;
reg [8:0] out1;
reg [8:0] out2;
reg [8:0] out3;
reg ee;
//---------------------------------------//
always@(posedge clk1 or negedge reset)
begin
if (!reset)
out1=0;
else if(ee==1)
out1=out1+1;
end
//---------------------------------------//
always@(posedge clk2 or negedge reset)
begin
if (!reset)
out2=0;
else if (out1<5)
begin
out2=out2+1;
ee=1;
end
else
begin
ee=0;
out3=out2;
end
end
//---------------------------------------//
endmodule
///////////////////////////////////////////////////////////////////
但是烧录到FPGA里面,用LED接出来看,结果还是错误(输出的值乱跳)~@@
因为我之前没上过verilog,自己看书学,为了解决这问题,借了几本verilog的书~
试了很久还是失败,请问我这程式这样写是不是有些用法错误?
另外请问,verilog里面可以放多个always@()这个东西吗?因为我看到范例程式
好像都只写ㄧ个always@()?
谢谢~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 120.114.64.82
1F:推 appendixisu:1.可以写多个ALWAYS 12/31 22:44
2F:→ appendixisu:2.你的CLK1跟CLK2 频率差多少?? 12/31 22:45
3F:→ appendixisu:3.假设CLK1跟2频率一样 OUT1也会少OUT2 "1"原因在於ee 12/31 22:46
4F:→ appendixisu:建议你第一个ALWAYS 也定义一下ee=0的时候的动作方式 12/31 22:48
5F:→ pikachu2005:CLK2大概是25Mhz,CLK1比较慢~大约是KHz等级~ 01/01 02:26
6F:→ pikachu2005:拍谢打错~CLK1也是Mhz等级~大约是1MHz~10MHz~ 01/01 02:29
7F:→ bakerly:基本上你这样写乱跑是正常...你把两个不同CLK产生的讯号随 01/01 19:21
8F:→ bakerly:意拉来拉去...这样的电路就算会动也会三不五时给你错一下 01/01 19:23
9F:→ kingofgar:if (!rst) out1<=0; else out1<=(out1<5)?out1+1:out1 01/02 07:01
10F:→ kingofgar:if (!rst) out2<=0; else out2<=(out1<5)?out2+1:out2 01/02 07:02
11F:→ kingofgar:请问你是想要这样的架构吗?... 01/02 07:02
12F:→ pikachu2005:To bakerly大,请问我的程式要怎麽改会比较好? 01/02 17:32
13F:→ pikachu2005:To Kin大,因为CLK1跟2,频率是一直送进去的~所以程式 01/02 17:34
14F:→ pikachu2005:不知道要怎麽改~让CLK1的值计数到5次时~把CLK2的值丢 01/02 17:35
15F:→ pikachu2005:给out3,我在改看看~谢谢~ 01/02 17:36
16F:推 ycy:两个clk不同步,在cross domain的讯号最好用1 bit就好 01/02 18:22
17F:→ pikachu2005:To Kin大,按照你的架构做出来了~^^谢谢大家的建议~ 01/02 19:23
18F:→ kingofgar:同yc大,最好把out1转成gray code,再加上synchronizer 01/04 08:41
19F:→ kingofgar:还有你漏掉很多else..所以会乱跑也是有可能的 01/04 08:51
20F:→ uxijgil:问题可能会出在 clk2 posedge时 out5 稳不稳定不知道 01/05 01:56
21F:→ uxijgil:你的code是写成把两讯号当synchronous 但实际上他们并不 01/05 01:57
25F:→ sneak: //muxiv.com 01/04 22:15