一些Verilog与VHDL相关的笔记

/synthesis noprune/ 避免Quartus II優化掉沒output的reg。

/synthesis preserve/ 避免Quartus II將reg優化為常數,或者合併重複的reg。

/synthesis keep/ 避免Quartus II優化掉wire

以上编译器命令必须写在;之前,写在;之后的话仅仅是一般注释。


clk’event and clk = ‘1’,对任何时钟跳变到1的沿都会触发。比如,0 to 1, ‘z’ to 1, ‘x’ to 1.
对于rising_edge(clk),只能是0 to 1。
说法只有理论上的意义!实际上的时候不可能有’z’ to 1, ‘x’ to 1的变化.如此,系统肯定无法运行.
只有在仿真中才有区别


在VHDL中,逻辑操作符是 and,or,nand,not,xor,xnor,其操作是按位操作;
在Verilog中,逻辑操作符是 &,|,,^,^或^,没有与非操作符,与非用(A&B);

Verilog中!是针对整体的,比如对于一个4位reg型的变量,a=4’b0010,则!a=4’b0000。
Verilog中是按位取反,比如对于一个4位reg型的变量,a=4’b0010,则a=4’b1101。

Verilog中and/or/not等属于门级描述,一般不使用。

在VHDL中,移位操作(sll,srl,sla,sralrol,ror)只针对bit_vector进行操作

在VHDL中,变量赋值:=,相当于verilog中的阻塞赋值=,立即生效;信号赋值<=,相当于Verilog中的非阻塞赋值语句<=。

一般情况下,组合逻辑应用阻塞赋值,时序逻辑应用非阻塞赋值

Verilog的标识符比VHDL中的短标识符多一个$可用

VHDL中=> 是 then的意思

VHDL中& 是 连接操作符,不是按位逻辑与
Verilog中连接用{A,B}实现。