verilog之原语设计
1、原语作用
在一般的verilog设计中,一般采用数字逻辑设计,由软件将数字逻辑转化为特定的数字电路。但是,对于某些特殊的领域,有可能需要用户直接自定义数字电路以达到对指定电路的设计。原语就是执行这个功能的。原语也就是门级语言。这个语言之于verilog就像汇编语言之于C语言一样,是门级网表所采用的语法。了解这个语言的语法,可以提高对编译器工作的认识。如果具有足够的经验,甚至可以直接修改门级网表来实现设计的实现。对于一个大型的工程而言,这无疑会节约大量的时间。
2、基本语法
简单的与或非门:
and a1(out1,in1,in2); //简单的与门a1,先输出,再输入
not n1(out1,in1); //简单的非门
or or1(out1,in1,in2); //简单或门
xor xor1(out1,in1,in2);//简单异或门
nand nand1(out1,in1,in2);//与非门
nor nor(out1,in1,in2);//与或门
xnor xnor1(out1,in1,in2);//简单同或门
buf b1(out1,out2,in); //二输出缓存门,除了z会被当作x输出,其他输出和输入一样
bufif1 bf1(outw,inw,controlw);//三态门,控制位为0,输出为z,控制位为1,输出等于输入,一般不将控制位置于高阻;fi1就是控制位为1输出。
//同理可以推出bufif0是control为0时输出有效。其他的三态门如notif0和notif1就是在buf三态上加上not逻辑,即输出为输入的非。
阵列输入的与或非门:
nand #2 nand_array[3:0] (out,in1,in2);//这里的out,in1,in2都是和[3:0]的位宽对齐的。就相当于声明了一排与门。可以理解为总线与非门
bufif0 ar[3:0] (out,in,en);//注意,这里的控制端口en是一个位宽,也就是声明由一个控制口控制的阵列三态门。
//还有一些复杂的阵列操作,如合并,添加等,这里就不多说明。
在FPGA常用的门级组合逻辑语言就这几个。还有一些基于器件的描述和传输门的描述以后有时间再看,现在先接触简单逻辑。
延时控制:
#(95:100:105) clk=1;//这个#的延时是95到105之间,经典值为100,用于表示时钟的偏斜
and #(10) a1(out,in1,in2);//输入输出总延时
and #(10,12) a2(out,in1,in2);//上升延时和下降延时,区分了上升和下降的区别
bufif1 #(10,12,11) a3(out,in1,en);//上升延时,下降延时和关断延时,关断延时,就是en作用的时间
这里也是几个简单的延时模型,还有许多其他的语法,这里就不多介绍。
3、简单总结
想要掌握原语设计还是比较困难的,但是阅读应该是必要的。通过阅读自己写的verilog代码所对应的原语,可以快速理解自己代码所对应的电路。通过对数字电路的理解,可以提高设计的认识,进而理解verilog的设计方法。而且,对于学习过数字电路设计的人来说,将简单的数字电路转化为原语也是一个不错的挑战。