原创
[博客大赛]关于verilog和数字电路的关系(一)
学习FPGA,得学习一门硬件描述语言,业内主流的两种语言便是VHDL和verilog,语言的语法和C语言类似,编码比较紧凑,原件例化比较灵活方便,因此使用起来比较顺手,所以选择verilog进行学习。verilog是一门硬件描述语言,顾名思义,就是用来描述硬件的。利用C语言般的语法,来描述数字电路的底层基本单元,然后通过对连线的描述,从而告诉软件,我们需要一个什么样的电路。
众所周知,C语言是一个顺序执行的代码,为什么可以利用C语言的语法来描述一个电路结构?竟然可以像画图般,利用C语言绘画出一幅电路图,然后由软件根据一幅这样的电路图来完成电路的生成。下面看看xilinx的xst是怎么根据一些C语言的语法以及一些新的关键词生成数字电路中基本电路原件和模块。
1、触发器
always @(posedge clk)
begin
if (rst) Q <= 4 ’b0011;
else if Q <= D; end
通过一个always+posedge clk,任何一个“<=”即描述了一个触发器,if下的条件只是这个触发器上的众多扩展口。当然,受到posedge clk的影响,全部变成了时钟同步信号。
2、锁存器
always @ (G or D)
begin
if (G)
Q <= D;
end
锁存器类比寄存器少了时钟,因此一个always下的“<=”即描述了一个锁存器,if下的条件只是这个锁存器上的扩展口。
3、三态门
always @(T or I)
begin
if (~T)
O = I;
else
O = 1’bZ;
End
或者
assign O = (~T) ? I: 1’bZ;
“=”在verilog里称为连续赋值,物理上便是畅通无阻,如一根导线般,导线输入端数据变化,输出端即迅速变化成输入端的数据。因此always下的“=”不会产生锁存器或者寄存器。上述两种描述均产生三态门。
4、算数运算符
在verilog中,“+ - * /”即描述了一加法器、减法器、乘法器、除法器。当然,这些运算单元还是由一些门来组成,像现在FPGA内部一般都嵌入了DSP单元,因此综合器会把这些基本单元直接综合至DSP中。
5、逻辑操作符
与或非等逻辑操作符,综合器会自动生成相应的逻辑门,来搭建组合电路,我们通过操作符和连线的描述,来绘制组合逻辑。当然FPGA的底层实现不一定是逻辑门,现在的FPGA都采用查找表技术来实现逻辑函数。
6、移位寄存器
always @(posedge clk)
begin
if (clken)
shreg <= {shreg[WIDTH-2:0], SI};
end
上述代码描述了一个宽度为WIDTH的移位寄存器,SI是移位寄存器的输入。
用户1002534 2013-8-13 21:50