武汉理工大学暑期能力拓展训练1目录1多功能双向移位寄存器......................................................11.1基本工作原理.........................................................11.2基本实现方案........................................................12电路图设计................................................................22.1电路结构............................................................22.2真值表...............................................................33移位寄存器的Verilog建模..................................................33.1Verilog建模基础......................................................43.28位双向移位寄存器Verilog描述.......................................54程序仿真..................................................................65心得体会..................................................................8参考文献...................................................................10附录.......................................................................11武汉理工大学暑期能力拓展训练2摘要使用硬件描述语言Verilog,在EDA工具QuartussII中,对8位双向移位寄存器进行行为级描述,根据设计语言进行功能时序仿真,验证设计的正确性与可行性。通过本基本设计熟悉QuartusII环境下的硬件描述操作流程,掌握基本的Verilog语法与编写风格。关键字:VerilogQuartusII移位寄存器武汉理工大学暑期能力拓展训练3武汉理工大学暑期能力拓展训练1设计8位双向移位寄存器电路1多功能双向移位寄存器1.1基本工作原理移位寄存器是基本的同步时序电路,基本的移位寄存器可以实现数据的串行/并行或并行/串行的转换、数值运算以及其他数据处理功能。但有时候需要对移位寄存器的数据流向加以控制,实现数据的双向移动,其中一个方向称为右移,另一个方向称为左移,这种移位寄存器就称为双向移位寄存器。根据国家标准规定,逻辑图中的最低有效位(LSB)到最高有效位(MSB)的电路排列顺序应从上到下,从左到右。因此定义移位寄存器中的数据从低位触发器移向高位为右移,移向低位为左移。为了扩展逻辑功能和增加使用的灵活性,某些双向移位寄存器集成电路产品又附加了并行输入、并行输出等功能。下图所示是上述几种工作模式的简化示意图。D0FF0D1FF1D2FF2D3FF3并行输入并行输出右移串行输入(DIR)左移串行输出(DOL)右移串行输出(DOR)左移串行输入(DIL)Q0Q1Q2Q3图1-1多功能移位寄存器工作模式简图1.2基本实现方案图1-2所示是实现数据保持、右移、左移、并行置入和并行输出的一种电路方案。图中的D触发器mFF是N为移位寄存器中的第m位触发器,在其数据输入端插入了一个4选1数据选择器mMUX,用2位编码输入10SS、控制mMUX,来选择触发器输入信号mD的来源。当100SS时,选择该触发器本身输出的mQ,次态为1mnnmmQDQ,使触发器保持状态不变;当100,1SS时,触发器1mFF的输出1mQ被选中,故CP脉冲上升沿到来时,mFF存入1mFF此前的逻辑值,即1m1nnmQQ,而1m+1nnmQQ,从而实现右移功能;类似地,当101,0SS时,mMUX选择1mQ,实现左移功能;而当101SS时,则选中并行输入武汉理工大学暑期能力拓展训练2数据mDI,其次态1nmmQDI,从而完成并行数据的置入功能。上述四种操作概述于表1-1,此外,在各触发器的输入端10~NQQ,可以得到N位并行数据的输出。图1-2实现多功能双向移位寄存器的一种方案表1-1图1-2的功能表控制信号功能控制信号功能S1S0S1S000保持10左移01右移11并行输入2电路图设计2.1电路结构根据上一节的移位寄存器的一种基本实现方案,可以设计出8位双向移位寄存器,完整电路图入图2-1所示。此电路由8个4选1数据选择器、8个带异步清零的D触发器组成。所有的数据选择器编码端10SS分别对应地接在一起,同时选择D触发器的信号数据来源。D触发器时钟端CP接一起,清零端CR也同样接在一起,这样可以保证级联D触发器的同步,和并行输出数据的清零。另,每个D触发器的输出对应一位并行输入。Dsr是右移串行数据输入端,Dsl是左移串行数据输入端,分别接最低有效位对应的数据选择器和最高有效位对应的数据选择器。武汉理工大学暑期能力拓展训练3data3data2data1data0sel[1..0]resultlpm_mux0instdata3data2data1data0sel[1..0]resultlpm_mux0inst4data3data2data1data0sel[1..0]resultlpm_mux0inst5data3data2data1data0sel[1..0]resultlpm_mux0inst6data3data2data1data0sel[1..0]resultlpm_mux0inst7data3data2data1data0sel[1..0]resultlpm_mux0inst8data3data2data1data0sel[1..0]resultlpm_mux0inst3CLRNDPRNQDFFinst17CLRNDPRNQDFFinst19CLRNDPRNQDFFinst20CLRNDPRNQDFFinst21CLRNDPRNQDFFinst22CLRNDPRNQDFFinst23CLRNDPRNQDFFinst24VCCCRINPUTVCCS1INPUTVCCS0INPUTVCCDsrINPUTVCCD0INPUTVCCD1INPUTVCCD2INPUTVCCD3INPUTVCCD4INPUTVCCD5INPUTVCCD6INPUTVCCD7INPUTVCCDslINPUTQ0OUTPUTQ1OUTPUTQ2OUTPUTQ3OUTPUTQ4OUTPUTQ5OUTPUTQ6OUTPUTQ7OUTPUTGNDCLKINPUTCLRNDPRNQDFFinst18GNDCPINPUTdata3data2data1data0sel[1..0]resultlpm_mux0inst25图2-18位双向移位寄存器2.2真值表分析电路图,可得此8位双向移位寄存器的真值表,入下表所示:表2-18位双向移位寄存器真值表输入输出清零控制信号串行输入时钟CP并行输入1107~nnQQCRS1S0DsrDsl07~DIDILLHLL07~nnQQHLHL06~nnLQQ、HLHH06~nnHQQ、HHLL17~nnQQL、HHLH17~nnQQH、HHH**07~DIDI07~DIDI注:*NDI表示CP脉冲上升沿之前瞬间NDI的电平3移位寄存器的Verilog建模武汉理工大学暑期能力拓展训练43.1Verilog建模基础硬件描述语言VerilogHDL类似于高级程序设计语言(如C语言等),它是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示更复杂的数字逻辑系统所完成的逻辑功能(即行为)。人们还可以用HDL编写设计说明文档,这种文档易于存储和修改,适用于不同的设计人员之间进行技术交流,还能被计算机识别和处理,计算机对于HDL的处理包括两个方面:逻辑仿真和逻辑综合。逻辑仿真是指用计算机仿真软件对数字逻辑电路的结构和行为进行预测,仿真器对HDL描述进行解释,以文本形式或时序波形图形式给出电路的输出。在电路在实现之前,设计人员可以根据仿真结果初步判断电路的逻辑功能是否正确。在仿真期间,如果发现设计中存在错误,可以对HDL文件进行修改,直至满足设计要求为止。在Verilog中,行为级描述主要使用由关键词initial或always定义的两种结构类型的语句。一个模块的内部可以包括多个initial或always语句,仿真时这些语句同时并行执行,即与他们在的模块内部排列无关,都从仿真的0时刻开始。本设计采用always语句对8位双向移位寄存器进行行为级功能描述。Always本身是一个无限循环语句,即不停地循环执行其内部的过程语句,直到仿真过程结束。但用它来描述硬件电路的逻辑功能时,通常在always后面紧跟着循环控制条件,所以always语句的一般用法如下:always@(事件控制表达式)begin块内局部变量的定义;过程赋值语句;end这里,“事件控制表达式”也称敏感事件表,即等待确定的事件发生或某一特定的条件变为“真”,它是执行后面过程赋值语句的条件。“过程赋值语句”左边的变量必须被定义成寄存器数据类型,右边变量可以是任意数据类型。begin和end将多条过程赋值语句包围起来,组成一个顺序执行语句块,块内的语句按照排列顺序依次执行,最后一条语句执行完后,执行挂起,然后always语句处于等待状态,等待下一个事件的发生。注意,begin和end之间只有一条语句,且没有定义局部变量时,则关键词begin和end可以被省略。武汉理工大学暑期能力拓展训练5在Verilog中,将逻辑电路的敏感事件分为两种类型:电平敏感事件和边沿触发事件。在组合电路中,输入信号的变化直接会导致输出信号的变化。时序电路中的锁存器输出在使能信号为高电平时未亦随输入电平变化,这种对输入信号电平变化的响应称为电平敏感事件。而触发器状态的变化仅仅发生在时钟脉冲的上升沿或下降沿。Verilog中分别用关键词posedge(上升沿)和negedge(下降沿)进行说明,这就是边沿敏感事件。3.28位双向移位寄存器Verilog描述本设计通过行为级描述语句always描述了一个8位双向移位寄存器,它有两个选择输入端、两个串行数据输入端、8个并行数据输入端和8个并行数据输出端,完成的功能与图2-1的电路相同。它有5种功能:异步置零、同步置数、左移、右移和保持状态不变。当清零信号CR跳变到低电平时,寄存器的输出被异步置零;否则,当CR=1时,与时钟信号有关的4种功能由case语句中的两个选择输入信号S1和S0决定(在case后面S1、S0被拼接成2位矢量)。设计程序如下://BehavioraldescriptionofUniversalshiftregistermoduleshift(S1,S0,D,Dsl,Dsr,Q,CP,CR);inputS1,S0;//SelectinputsinputDsl,Dsr;//serialdatainputinputCP,CR;//ClockandResetinput[7:0]D;//ParallelDatainputoutput[7:0]Q;//Registerouputreg[7:0]Q;always@(posedgeCPornegedgeCR)if(~CR)Q=8'b00000000;elsecase({S1,