lljlljlzh1

veirlog书写规范

结构说明语句

always语句声明格式:always<时序控制><语句>如果always语句没有时序控制,则这个always语句将会使仿真器产生死锁。eg:alwaysareg=~areg;这个always语句将生成0延时的无限循环跳变过程,这时会发生死锁。沿触发的always块常常描述时序行为,如

生成块

生成语句可以动态的生成Verilog代码。这一声明语句方便了参数化模块的生成。当对矢量中的多个位进行重复操作时,或者当进行多个模块的实例引用的重复操作时,或者在根据参数的定义来确定程序中是否应该包括某段Verilog代码的时候,使用生成语句能够大大的简化程序的编写

顺序块和并行块

并行块如果两条语句在同一个变量产生影响,那么将会引起隐含的竞争。从仿真的角度来讲,并行块中的所有语句是一起执行的看,但是实际上运行仿真程序的cpu在任一时刻只能执行语句,而且不同的仿真器按照不同顺序执行。因此无法正确的处理竞争是目前所有的仿真器的一个缺

条件语句,循环语句,块语句

条件语句:条件语句必须在过程快语句中使用。即在initial和always语句中执行。系统对表达式的值进行判断,若为0,x,z按“假”处理;若为1按真处理。简写方式:if(expression)等同于if(expression==1)if(!expression)等同于if(expression!=1)case语句:

赋值语句和块语句

一赋值语句非阻塞(Non_Blocking)赋值方式(如b<=a)(1)在语句块中,上面语句所赋的变量值不能立即就为下面的语句所作用;(2)块结束后才能完成这次赋值操作,而所赋的变量值是上一次赋值得到的;(3)在编写可综合的时序逻辑模块时,这是最常用的赋值方法。eg在always

运算符

逻辑运算符中的“&&”和“||”的优先级分别低于关系运算符,“!”高于算术运算符(!a)||(a>b)可以写成!a||a>b.为了提高程序的可读性,明确表达式各个运算符元件的优先级关系,建议使用括号。在进行关系运算符时,如果声明

verilog的特点和c语音的区别

运算符

进行取模运算符时结果的值的符号位采用模运算式里的第一个操作数的符号位-10%3结果为-111%-3结果为2

数据类型

wire型wire型数据类型常用来表示用以assign关键字指定的组合逻辑信号reg型reg类型数据类型的默认初始值为不定值,在always模块中被赋值的每一个都必须定义为reg型。对于reg型数据,其赋值语句的作用就如同改变一组触发器的存储单元的值。reg型数据类型可以赋正直,也可

通过参数(parameter)的传递来改变定义时已规定的参数值

moduleDecode(A,F);parameterWidth=1,Polarity=1;...endmodulemoduleTop;wire[3:0]A4;wire[4:0]A5;wire[15:0]F16;wire[31:0]F32;Decode#(4,0)D1(A4,F16);//实例D1引用的参数Width和Polarity分别为4和0Decode#(5)D2(A5,F32);/

常量位宽的问题

减号不可以放在位宽和进制之间,只需在位宽的表达式前面加一个减号,减号必须写在数字定义表达式的最前面如:-8‘d5ofk8d-derror当常量不说明位数时,默认值是32位,每个字母用8位的ASCII值表示如:10=32’d10=32b1010-1=-32d1=32hffff_ffff&quot

HDL设计流程图