搜索
bottom↓
回复: 22

QII V7.2编译总遇到 Error (10028):Can't resolve multiple constant drivers for

[复制链接]

出0入0汤圆

发表于 2007-11-30 12:51:20 | 显示全部楼层 |阅读模式
QII V7.2编译总遇到"Error (10028):Can't resolve multiple constant drivers for net "rWE" at SRAM.v(144)"是什么原因啊?

大侠请指教.

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2007-11-30 16:33:22 | 显示全部楼层
怎么一个回的人都没有啊,呵呵,

已经解决了,原来是不能在两个以上always内对同一变量赋值.

另我想问一下verilog内如何定义"全局变量"啊.就是可以在多个.v文件内读写访问的那种.

还有就是"全局数组"如何实现啊?

出0入0汤圆

发表于 2007-12-4 22:52:02 | 显示全部楼层
VerilogHDL不是C语言,不要使用全局变量,全局数组,数组什么之类的,仿真除外了。否则有这种思路的话赶快修改程序构架!呵呵

出0入0汤圆

 楼主| 发表于 2007-12-4 23:11:00 | 显示全部楼层
【2楼】 that1101:
大侠,我想在一些接口处实现FIFO,那我不用数组用什么方法实现呢?

我现在改成0,1,2....这样的编号了,然后使用case来跳转看倒底是读些那个变量.

资源倒是下来不少,可感觉好勒索啊!

现在刚开始写verilog,都只用一个module呢.这样来说就没有全局的东西了吧

出0入0汤圆

发表于 2007-12-5 11:02:12 | 显示全部楼层
[例25] 使用非阻塞赋值语句,由于两个always 块对同一变量q 赋值产生竞争冒险的程序:
module badcode1 (q, d1, d2, clk, rst_n);
output q;
input d1, d2, clk, rst_n;
reg q;
always @(posedge clk or negedge rst_n)
if (!rst_n) q <= 1'b0;
else q <= d1;
always @(posedge clk or negedge rst_n)
if (!rst_n) q <= 1'b0;
else q <= d2;
endmodule
当综合工具(如Synopsys)读到[例25]的代码时,将产生以下警告信息:
Warning: In design 'badcode1', there is 1 multiple-driver
net with unknown wired-logic type.
如果忽略这个警告,继续编译例26,将产生两个触发器输出到一个两输入与门。其综合级前仿真与综合
后仿真的结果不完全一致。


原则6:严禁在多个always 块中对同一个变量赋值。


刚看到的

出0入0汤圆

 楼主| 发表于 2007-12-5 13:12:00 | 显示全部楼层
上面这个列25肯定有问题的,两个always条件相同(即同时执行),结果一个要=d1,另一个要=d2.

我是想实现:
module test(q,clk);
    input clk;
    output q;
    reg q;
   
    always @(posedge clk)begin
       q=1;
    end
   
    always @(negedge clk)begin
       q=0;
endmodule

理论上时序不冲突的.因为一个上升沿一个是下降沿.编译不过.

要不我改成:
    always @(clk)begin
       if(clk == 0)
           q=0;
       else
           q=1;
    end
还是不行.

出0入0汤圆

发表于 2007-12-6 13:35:25 | 显示全部楼层
module test2(clk,q);
    input clk;
    output q;
    reg q;
     
    always @( clk)
    begin
        if(clk==0)
        q = 0;
        else q = 1;
    end
     
   
endmodule


貌似我可以综合啊,说时序逻辑最好用<=赋值

出0入0汤圆

 楼主| 发表于 2007-12-6 13:51:24 | 显示全部楼层
综合是可以,可仿真时序根本没有赶程序运行,你仿真一下clk和q的关系看看啊,好象不行啊

出0入0汤圆

发表于 2007-12-6 20:21:29 | 显示全部楼层
仿真出来了,没有问题
module test2(clk,q);
    input clk;
    output q;
    reg q;
     
    always @( clk)
        begin
                if(clk==0)
                 q = 1;
                else q = 0;
    end
     
   
endmodule

看图

出0入0汤圆

 楼主| 发表于 2007-12-6 20:52:16 | 显示全部楼层
哦,那我试试,如果这样可以的话到是可以考虑

出0入0汤圆

发表于 2007-12-6 22:21:51 | 显示全部楼层
to 【3楼】 Oliver
想要实现FIFO最好不要自己写,QuartusII有工具自动生成FIFO,而且是针对Altera的FPGA做过优化的。无经验的工程师自己写的FIFO在速度与面积上无法与它相比的。
这个工具的路径是Tools>MegaWizard Plug-in Manager...
FIFO需要占用很多寄存器资源,一般CPLD不适合使用FIFO。对于有片内RAM的FPGA,可以设置生成FIFO时使用片内RAM,这样可以节约大量逻辑资源。

出0入0汤圆

发表于 2007-12-6 22:35:28 | 显示全部楼层
to 【4楼】 laoki8888 阿虚
这个并不是所谓的竞争冒险的问题。
这里的思路存在问题。首先,你究竟是想把d1赋值给q1还是想把d2赋值给q1呢?其次,如果d1与d2相等还好,如果不相等,例如d1=1,d2=0,那么q是为1好还是为0好呢?总得有个选择才行。
再来考虑具体的电路实现,q对应DFF,那么d1与d2要赋值给q,要么经过与门,或门,多路选择器或其它的逻辑门,怎不能把d1与d2短接在一起赋值给q把?所以程序描述出来的信息不够,综合器不知道怎么办(注意,综合器不比人聪明,事实是比人笨得多),所以综合出来得东西当然出错。实际上,有些综合工具直接就报错了,因为这是不可综合设计。

出0入0汤圆

 楼主| 发表于 2007-12-6 22:38:43 | 显示全部楼层
谢谢10楼的指点,那个功能我知道,我就是想用自己写的代码试试看.厂家的"库"应该是非常优化的.

出0入0汤圆

发表于 2007-12-6 22:41:14 | 显示全部楼层
to 【5楼】 Oliver
这个描述同样属于不可综合设计,综合工具会直接报错。
道理很简单,一个寄存器不可能对时钟的两个边沿敏感,物理结构上无法实现。
仿真时可以这样用。

出0入0汤圆

发表于 2007-12-6 22:42:42 | 显示全部楼层
长见识了哈~

出0入0汤圆

发表于 2007-12-6 22:47:33 | 显示全部楼层
to laoki8888 阿虚
你这个程序根本就不是时序逻辑设计
那个描述实际上等价于
wire    q;
assign q= clk;
究竟什么是时序逻辑设计还是找本书看看吧。呵呵

出0入0汤圆

 楼主| 发表于 2007-12-6 22:55:06 | 显示全部楼层
that110大侠:

硬件电路可以在clk上升沿缩存一个"1",

下降沿取反后也等同于上升沿(但相位相差180度),不可以锁存一个"0"吗?

出0入0汤圆

发表于 2007-12-9 22:29:53 | 显示全部楼层
to 【16楼】 Oliver
简单地说吧,采用always @ posedge 或always @negedge 语句描述的时序电路在FPGA中实现的方式就是采用D触发器(DFF),D触发器在时钟跳变边沿锁存数据,触发器只能接受一个时钟。always @posedge 语句描述的是D触发器在上升沿到来时锁村数据,always @negedge 描述的是时钟边沿的下降沿锁存数据。由于D触发器只能在上升沿或下降沿锁存数据,一个D触发器不可能两个边沿都利用(具体原因去看D触发器的原理),因此你的描述也就无法实现了。

出0入0汤圆

 楼主| 发表于 2007-12-9 23:04:35 | 显示全部楼层
谢谢that1101 的讲解,今天我看见了关HDL的不可综合原因,

什么除法,开方,双边沿触发,变量循环....都是过于抽象或者不可综合描述行为.

出0入0汤圆

发表于 2007-12-9 23:10:52 | 显示全部楼层
谢谢 that1101 讲解
帮我看看我那个状态机问题好吗?

出0入0汤圆

发表于 2010-6-6 19:49:57 | 显示全部楼层
学习,现在也遇到这问题

出0入0汤圆

发表于 2012-6-25 13:55:53 | 显示全部楼层
学习了,不错哈。

出0入0汤圆

发表于 2013-4-18 20:40:31 | 显示全部楼层
that1101 讲得很不错
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 07:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表