1. verilog的赋值语句分为连续赋值和过程赋值,连续赋值用于给线网型的变量赋值,也只能给线网型的变量赋值;过程赋值用于给寄存器型变量赋值,也只能给寄存器型变量赋值;过程赋值又分为阻塞赋值和非阻塞赋值,在使用always块描述组合逻辑时使用阻塞赋值;在使用always块描述时序逻辑时使用非阻塞赋值。
2. 连续赋值关键字以assign开头;
3. 在使用assign描述电路时,由于所有信号都是线网型的,因此所描述的电路中一定不含有记忆元件,因此描述的电路一定是组合逻辑电路;但在使用always描述组合逻辑时,由于verilog 语法规定有些变量不得不定义为寄存器型,但这并不表示所描述的电路是时序逻辑电路。
4. 组合逻辑电路:任何时刻电路的输出仅与该时刻电路的输入有关的数字电路。
5. 时序逻辑电路:任何时刻电路的输出与当前的输入和电路原来的状态有关的数字电路。它包括组合逻辑电路和存储电路。
6. 时序电路建模时,用非阻塞赋值;
7. 锁存器建模时,用非阻塞赋值;
8. 用always块写组合逻辑时,采用阻塞赋值;
9. 在同一个always块中同时建立时序和组合逻辑电路时,用非阻塞赋值;
10. 在同一个always块中不要同时使用非阻塞和阻塞赋值;
11. 不要在多个always块中对同一个变量赋值;
12. 用$strobe系统任务来显示用非阻塞赋值;
13. 在赋值时不要使用#0延迟。
14. 用的语句之一,其后要加上事件控制,事件控制一般分为电平敏感事件和边沿敏感事件,电平敏感事件是指当某个信号的电平发生改变时会触发事件,进而执行always块的内容,边沿敏感事件是指当某个信号的上升沿或下降沿到来时触发事件,进而执行always块的内容。一般来讲,电平敏感事件的always块用于描述组合逻辑,边沿敏感的always块用于描述时序逻辑。同一个always块内不能同时包含电平敏感事件和边沿敏感事件。
15. initial语句指定的内容只执行一次,因此initial语句后不跟事件控制语句。
16. 在定义变量时,应定义其位宽,如果不定义,以默认的位宽为1.
17. 在端口声明中被声明为input或者inout型的端口只能被定义为线网型变量,被声明为output型的端口可以被定义为线网型或者寄存器型,如果不定义,则默认为线网型。任何在always块内被赋值的变量都必须为寄存器型。
选购蜂蜜18. 参数型变量与线网型和寄存器型不同,它没有对应的物理模型,参数型变量使用关键字nparameter。
(1)编dcm时钟控制测试程序时,设置好了ip,例化输出,综合时出现错误
ERROR:Xst:2035 - Port <clk> has illegal connections. This port is connected to an input buffer and other components.
查到的解决方法是禁掉自动I/O Buffer inrtion 功能,具体的做法是右击synthesize,然后properties->Xilinx Specific Options,把add I/O buffer 的勾去掉,综合通过。但是这样处理了之后在map时又引入了许多的warning,而且还会引发错误。方法出处一会转帖出来。
(2)dac8812的控制时序测试时,综合没问题,但是map时出现错误
Pack:198 - NCD was not produced. All logic was removed from design.
其实这个错误的来源是下面的这几个warning职业发展规划导致
MapLib:701 - Signal clk connected to top level port clk has been removed.
MapLib:701 - Signal dad connected to top level port dad has been removed.
以下省略很多这样的warning,这个问题之前一直没注意,后来才知道问题出在我在问题(1)中的处理,按照同样的流程把add I/O buffer 勾上,综合到route黄皮核都没什么问题,可见warning也是不能忽略的呀。
(3)刚才不知道怎么了,行为仿真的时候出现下面的error
ERROR:HDLParrs:3482 - Could not resolve instantiated unit dacinter in Verilog module work/datest_top in any library
南斯拉夫事件意思好像是找不到我top里例化的模块了,重新添加了一下,好用了。
(4)行为仿真发现没有波形,全是XX或者ZZZ,以前改一下clk频率就好了,这回这招不好使了,后来尝试改了一下rst的时间点,向后一段时间,发现好用了,仿真用的是i自带的simulation。
(5)综合错误:ERROR:Xst:528 - Multi-source in Unit <entity> on signal <sig>
大多数时候应该是同一个变量,在两个always模块中赋值了。还查到一些其他情况,一并粘贴:
Solution 1
This error appears when XST determines that there is contention on a particular signal. If the process assigning values to this signal are mutually exclusive (as in the ca of 3-state buffers), this message can be ignored.
However, in most cas, XST is able to determine when multiple drivers are illegal, and will stop synthesis soon after this message.
Check this signal and modify your code to avoid the existing contention.
Solution 2
In some cas, XST ties unconnected output ports to ground. If the output port is part of a 3-state bus, which in turn connects to another 3-state bus, then connecting one bit of the bus to ground will cau a multiple-driver error. Verify that this is not occurring in your design by arching for the following warning:
"WARNING:Xst:1305 - Output <dataout<23>> is never assigned. Tied to value 0."
To work around this issue, remove the unud output port.
Solution 3
This has also been en in the following condition:
When there is an association signal named to_qvm_d4.Q_num.
When using association signal(to_qvm_d4.Q_num), XST will rename it to "to_qvm_d4_Q_num" during synthesis. There is signal named "to_qvm_d4_Q_num" in the same architecture. XST is confud with the two signals and errors.
To work around this issue, rename either of the two signals.
Solution 4
荣典权EDK Designs
For EDK Designs using bidirectional signals DIR=IO and THREE_STATE=FALSE, the external port name must match the connecting signal name exactly. NOTE: IOB_STATE is deprecated in future EDK versions.
(6)ERROR:Xst:902 - "dec_g.v" line 38: Unexpected event in always block nsitivity list.手工陶艺制作
一个组合电路,综合出错,上网查说是敏感表中不能既有电平又有边沿,而且也不能同一个信号的上升沿和下降沿同时出现,去掉敏感表中的边沿,运行OK了。
可以忽略的warning
白酒泡枸杞(1)ProjectMgmt - "F:/verilogworks/FPGATESTS/datest_d" line 0 duplicate design unit: 'Module|datest_top'
19. 单击IP核无反应或卡住,删除源文件中的老房子翻新改造coregen_lock文件即可解决。