1、n 在在Verilog模块中,模块中,任务任务(task)通常被综)通常被综合成组合逻辑的形式;每个合成组合逻辑的形式;每个函数函数(function)在调用时通常也被综合为一个)在调用时通常也被综合为一个独立的独立的组合电路模块。组合电路模块。7.2 流水线设计流水线设计技术技术 o流水线设计是经常用于提高所设计系统运行速度的流水线设计是经常用于提高所设计系统运行速度的一种有效的方法。为了保障数据的快速传输,必须一种有效的方法。为了保障数据的快速传输,必须使系统运行在尽可能高的频率上,但如果某些复杂使系统运行在尽可能高的频率上,但如果某些复杂逻辑功能的完成需要较长的延时,就会使系统难以逻辑功
2、能的完成需要较长的延时,就会使系统难以运行在高的频率上,在这种情况下,可使用流水线运行在高的频率上,在这种情况下,可使用流水线技术,即在长延时的逻辑功能块中插入触发器,使技术,即在长延时的逻辑功能块中插入触发器,使复杂的逻辑操作分步完成,减小每个部分的延时,复杂的逻辑操作分步完成,减小每个部分的延时,从而使系统的从而使系统的运行频率得以提高运行频率得以提高。流水线设计的代流水线设计的代价是增加了寄存器逻辑,增加了芯片资源的耗用。价是增加了寄存器逻辑,增加了芯片资源的耗用。流水线操作的概念流水线操作的概念 o如某个复杂逻辑功能的实现需较长的延时,可如某个复杂逻辑功能的实现需较长的延时,可将其分解
3、为几个(如将其分解为几个(如3个)步骤来实现,每一步个)步骤来实现,每一步的延时变小,在各步间加入寄存器,以暂存中的延时变小,在各步间加入寄存器,以暂存中间结果,这样可大大提高整个系统的最高工作间结果,这样可大大提高整个系统的最高工作频率。频率。流水线操作的概念示意图流水线操作的概念示意图流水线操作的概念示意图流水线操作的概念示意图 非流水线方式非流水线方式8 8位全加器位全加器module adder8(cout,sum,ina,inb,cin,clk);input7:0 ina,inb;input cin,clk;output7:0 sum;output cout;reg7:0 tempa
4、,tempb,sum;reg cout,tempc;always(posedge clk)begin tempa=ina;tempb=inb;tempc=cin;end/输入数据锁存输入数据锁存always(posedge clk)begin cout,sum=tempa+tempb+tempc;endendmodule两级流水实现的两级流水实现的8 8位加法器位加法器module adder_pipe2(cout,sum,ina,inb,cin,clk);output reg7:output reg cout;reg3:0 tempa,tempb,firsts;reg firstc;alwa
5、ys(posedge clk)begin firstc,firsts=ina3:0+inb3:0+cin;tempa=ina7:4;tempb=inb7:endalways(posedge clk)begin cout,sum7:4=tempa+tempb+firstc;sum3:0=firsts;endendmodule将将8位数每四位分位数每四位分2次相加,形成两级流水线运算过程。次相加,形成两级流水线运算过程。四级流水线实现的四级流水线实现的8 8位加法器位加法器module pipeline(cout,sum,ina,inb,cin,clk);reg tempci,firstco,se
6、condco,thirdco,cout;reg1:0 firsts,thirda,thirdb;0 seconda,secondb,seconds;reg5:0 firsta,firstb,thirds;tempci=cin;end /输入数据缓存输入数据缓存always(posedge clk)begin firstco,firsts=tempa1:0+tempb1:0+tempci;/第一级加(低第一级加(低2位)位)firsta=tempa7:2;firstb=tempb7:/未参加计算的数据缓存未参加计算的数据缓存endalways(posedge clk)begin secondco
7、,seconds=firsta1:0+firstb1:0+firstco,firsts;seconda=firsta5:secondb=firstb5:/数据缓存数据缓存endalways(posedge clk)begin thirdco,thirds=seconda1:0+secondb1:0+secondco,seconds;thirda=seconda3:thirdb=secondb3:/数据缓存数据缓存endalways(posedge clk)begin cout,sum=thirda1:0+thirdb1:0+thirdco,thirds;/第四级加(高两位相加)第四级加(高两位
8、相加)end endmodule将将8位数每两位分位数每两位分4次相加,形成四级流水线运算过程。次相加,形成四级流水线运算过程。设计综合到不同器件的最高工作频率设计综合到不同器件的最高工作频率 2 2 2 2个加法器和个加法器和个加法器和个加法器和1 1 1 1个选择器的实现方式个选择器的实现方式个选择器的实现方式个选择器的实现方式module resource1(sum,a,b,c,d,sel);parameter SIZE=4;input sel;inputSIZE-1:0 a,b,c,d;output regSIZE:always(*)/使用通配符使用通配符begin if(sel)su
9、m=a+b;else sum=c+d;end endmodule7.3 资源共享(资源共享(Resource Sharing)资源共享可用来减少系统所耗用的器件资源,尤其是将一些资源共享可用来减少系统所耗用的器件资源,尤其是将一些耗用资源较多的模块进行共享,能有效降低整个系统耗用的耗用资源较多的模块进行共享,能有效降低整个系统耗用的资源。资源。2 2个选择器和个选择器和1 1个加法器的实现方式个加法器的实现方式module resource2(sum,a,b,c,d,sel);regSIZE-1:0 atemp,btemp;always(*)/使用通配符使用通配符begin if(sel)be
10、gin atemp=a;btemp=b;endelse begin atemp=c;btemp=d;endsum=atemp+btemp;endendmodule资源共享(资源共享(Resource Sharing)器件资源的消耗对比器件资源的消耗对比资源共享(资源共享(Resource Sharing)方方式式一一需需要要2个个加加法法器器,而而方方式式二二通通过过增增加加一一个个MUX,共共享享一一个个加加法法器器,由由于于加加法法器器耗耗用用的的资资源源比比MUX更更多多,因因此此方方式式二二更更节节省省资资源源。所所以以在在电电路路设设计计中中,应应尽尽可可能能使使硬硬件件代代价价高高
11、的的功功能能模模块块资资源源共共享享,从从而而降降低低整整个个系系统统的的成成本本。计计算算位位数数越越多多,耗用的资源差别越大。耗用的资源差别越大。资源共享(资源共享(Resource Sharing)结结 论论7.4 过程过程o在在Verilog语言中,过程语句包括语言中,过程语句包括always和和initial。always过程反复执行其中的块语句,而过程反复执行其中的块语句,而initial过程中的语过程中的语句块只执行一次。句块只执行一次。always过程可综合,过程可综合,initial语句只能用语句只能用于仿真。于仿真。oalways过程语句与过程语句与VHDL语言的进程语句语
12、言的进程语句Process非常相非常相像,像,它既可以用来描述时序电路,也可以用来描述组合电路它既可以用来描述时序电路,也可以用来描述组合电路。一个一个Verilog模块中的模块中的不同不同always过程语句是并行运行过程语句是并行运行的。的。oassign赋值语句、实例元件的调用也都是并行运行的,我赋值语句、实例元件的调用也都是并行运行的,我们可以这样理解:这些语句最终都综合或翻译成为具体的电们可以这样理解:这些语句最终都综合或翻译成为具体的电路结构,而这些电路结构是同时在运行或动作的。路结构,而这些电路结构是同时在运行或动作的。在进行数字系统设计的时候应注意在进行数字系统设计的时候应注意o将组合逻辑实现的电路和用时序逻辑实现的电将组合逻辑实现的电路和用时序逻辑实现的电路应尽量分配到不同的路应尽量分配到不同的always过程中。过程中。o一个一个always过程中过程中只允许描述对应于一个时只允许描述对应于一个时钟信号的同步时序逻辑。钟信号的同步时序逻辑。oalways过程必须由过程必须由敏感信号的变化来启动敏感信号的变化来启动,因此应精心选择进程敏感表达式中的敏感变量。因此应精心选择进程敏感表达式中的敏感变量。o多个多个always过程间可通过过程间可通过信号线信号线进行通信和进
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1