2008年10月19日星期日

Verilog学习笔记1

1.Verilog支持在不同抽象层建模,一个电路行为可以有多种不同的描述方式,但是,并不是每一种描述方式都是可被综合的。不可综合,也就是说,在物理上不可实现。
2.行为级描述方式不可综合。
3.RTL级建模是面向综合的设计,需要有实际的硬件电路与之对应。所以,对于RTL层次上的建模,最基本的思想就是"硬件意识"。即:在写代码的时候,大脑里要先想好完成的具体功能应该用什么样的物理电路去实现,然后用verilog语言将该电路描述出来,而不能凭空地去写代码,只有存在的电路才是可物理实现的。RTL级编码的过程原理:心中先有电路,再将它翻译成verilog代码。
4.电路在物理上是并行工作的。这个大家都知道,但是还是要注意:C语言程序的先后顺序是靠语句的排列顺序执行;但电路只要一上电,芯片内部各部分将同时工作。电路行为的先后顺序通过时钟节拍的顺序来体现。
5.人们常说的"输出三态"并不是指信号的输出除了0和1以外还有第三种状态(数字信号只有0和1),而是指芯片内外断开,互不影响。若总线上所有驱动源均停止驱动且无上拉or下拉电阻,则总线悬空,总线对地相当于一电容:如果关闭总线之前的输出为高电平,则有电容放电现象(总线残留的电荷流入地):如果关闭总线之前的输出为低电平,则用总线一直为低电平。若总线有上拉或者下拉电阻,则可以较快地被上拉到高电平or下拉到低电平,从而避免因电容缓慢放电而处于电平漂浮不定的情况。
当前主流FPGA结构中,除了I/O端口外,一般不支持内部三态,内部三态将被综合工具忽略。FPGA内部不允许对一个信号有多个驱动源,or一个驱动源输出为高电平而其他驱动源输出为低电平时将可能导致短路。
6.与三态端口相类似,FPGA内部没有双向端口,内部信号均为单一流向,输入输出需要用单独的信号表示,不能复用在一起;只有对应芯片接口的信号才能定义为双向端口。
7. RTL级编码中,正确使用阻塞与非阻塞的4个原则:
(1)带时钟的always模块使用非阻塞赋值;
(2)不带时钟的always模块使用阻塞赋值;
(3)连续赋值语句使用阻塞赋值;
(4)同一个always模块中不能同时出现阻塞赋值和非阻塞赋值;

PS:Modelsim的testbench仿真,一定要去掉优化,否则可能把信号优化没了
,显示不出你要观察的信号来。为此折腾了好几天,弱!

没有评论: