作者Trai (Trai)
看板Electronics
标题Re: [问题] quartus II 的问题
时间Sun Feb 11 00:58:34 2007
※ 引述《Trai (Trai)》之铭言:
: 请问quartusII 哪边可以看是否有合成出latch??
: 我不知道这样问对不对,因为目前的design时序一直不对,连续多笔运算
: 总是回随机出现几笔错误的结果,因此怀疑是不是因为latch的关系
: 但是我对FPGA的知识还不够,不知道EDA tool会不会自己避免latch产生
: 谢谢^^
谢谢推文的建议
我的问题其实是这样
将资料透过BUS送至FPGA中的buffer,再进行运算,最後再抓回去
这里是FPGA抓取资料到buffer的code
========================================================
always @(posedge IO_nWE)
begin
if(IO_nECS3==0)
case(io_addr)
16'h0000: buffer[0][31:16] <= io_data;
16'h0001: buffer[0][15:0] <= io_data;
16'h0002: buffer[1][31:16] <= io_data;
16'h0003: buffer[1][15:0] <= io_data;
16'h0004: buffer[2][31:16] <= io_data;
16'h0005: buffer[2][15:0] <= io_data;
.........etc
end
=========================================================
io_data为inout port,buffer宣告为reg [31:0] buffer [15:0] 16个宽度为32
的register。另有第二个buffer2存放另一组资料
除此之外还有一个运算模组接线如下
CAL c1(.out(output),
.opA(buffer[in_counter]),
.opB(buffer2[in_counter]),
.clk(CLK),
.reset(RESET),
.start(start));
这边主要就是当资料送到buffer後,start会拉起来,开始进行运算,
我使用一个in_counter当index,将资料一笔笔从buffer送到opA与opB中运算
in_counter在start拉起後每个clock+1
问题就出在我使用.opA(buffer[in_counter])拉线到运算模组的时候
有时候似乎会送入错误的资料,机率很小,但就是会发生。
如果不使用buffer[in_counter],直接固定.opA(buffer[0]) 就没问题,
压力测试的结果都正确。
这个bug已经花了我很多时间,但是又想不出原因
目前的想法是
buffer[in_counter] register有一个MUX来选择输出的register,会不会
是这个MUX造成glitch还是造成其他讯号的不同步?
但是合成後做的timing analysis得到的clock周期应该足够讯号稳定,
我已经使用这个版子上提供的最慢的频率了。但事实就是有错误。
想请问各位版友,问题有可能是我想的那样吗? 不论是或者不是
不知道有没有人有类似的经验可以分享? 在这里实在花太多时间了,
希望能在过年前解决这问题 ORz
谢谢^^
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.89.1
1F:→ duffrose:请试着把buffer的code拆开,也就是不要用reg. array来做 02/11 02:52
2F:→ DecadentX:io_addr 是有16bits吗?感觉起来很大,比较像memory 02/15 00:41
3F:→ DecadentX:16bits 的 MUX 我觉得很诡异..不过我verilog也才写三年 02/15 00:43
4F:→ DecadentX:如果是数到16 用4bits就好 02/15 00:44
5F:→ DecadentX:我是从你其他文章的推文判断你只需要count到16 ~~ 02/15 00:47