1、高速硬件除法器设计一、实验目的:了解和掌握硬件除法器的结构和工作原理,分析除法器的仿真波形和工作时序。二、实验原理:除法器算法的思路和手写除法基本一致。假设除法 a/b,a、b 是输入的两个位数都为 n 的二进制数。如果位数小于 n,可以在位数较少的数的前面添加 0 来满足这种位数要求。商和余数是 n 位标准矢量类型的二进制数。在过程中,算法也是按顺序执行的,但是综合后系统将会由组合逻辑电路组成,进程中的每一步都和系统构建的不同级别的逻辑电路相对应。首先,从输入信号中创建变量 A 和 B,A=a,B=b,其中 a,b 都是 n 位二进制数。如果A 大于等于 B,则商为 1 ,余数为 A-B,否
2、则商为 0,余数为 A。这是算法开始的第一次循环,如果小于 B,结果商位是 0,A 的值不做变化并保留其值。否则,结果商位为 1,则把相减后的余数插入变量 A 中。不管比较结果如何,变量 A 都要右移一位(左边添加 0) ,接着开始下一次循环。循环 n 次之后,n 位结果赋给商,最后 A 剩余的值就是余数。三、实验任务:用 VerilogHDL 设计除法器。除法器的参考程序如下:module DIV16(input CLK,input15:0 A,B,output reg15:0 QU,RE);reg15:0 AT,BT,P,Q; integer i;always (posedge CLK)
3、beginAT=A; BT=B; P=16H0000;Q=16H0000;for(i=15;i=0;i=i-1)beginP=P14:0,AT15;AT=AT14:0,1B0; P=P-BT;if (P15=1) begin Qi=0; P=P+BT; endelse Qi=1;endendalways (*) begin QU=Q;RE=P; endendmodule其中 A 和 B 是除法器输入端的两个 16 位数据,它们分别为被除数和除数,输出结果分成两部分:QU 是商,RE 是余数。给出仿真时序波形图。四、实验步骤:实验步骤大致分为三大步。(一) 、建立工作库文件和编辑设计文文件任何一
4、项设计都是一项 Project(工程) ,我们一般把一个工程下的所有文件放在一个文件夹内,这样方便我们整理,利用和提取不同工程下的文件,而此文件夹将被 EDA 软件默认为 Work Library(工作库) ,所以第一步先建立一个新的文件夹。(1)新建文件夹:在 F 盘建立并保存工程,文件夹取名 homework。(2)输入源程序:打开 Quartus II,选择菜单 FileNewDesign FilesVerilogHDL FileOK(如图所示)在打开的空白处工作框处输入任务要求中所列出的代码。(3)保存文件:选择 FileSave as,选择保存路径,即刚才新建的文件夹 homewor
5、k,文件名应与实体名保持一致,即 DIV16,点击保存后会跳出“Do you want to create a new project with this file?”选择“是” ,则进入如下界面点击 Next,进入“工程设置”对话框,如图所示第一行表示工程所在的文件夹,第二行为工程名,可以与顶层文件的实体名保持一致,也可以另取别的名字,第三行为当前工程顶层文件的实体名。点击 next,进入 ADD FILE 对话框,如图所示,单击 Add All 按钮,将工程相关的所有 VHDL 文件加进工程,也可以单击“Add .”选择性加入,按此步骤建立工程,工程已经自动将所有文件加进去了,可以直接点击
6、 next,当先直接建立工程时,需要自己添加(4)选择目标芯片:这里选用的是 CycloneIII 系列的 EP3C55F484C8,在 Family 栏选择芯片系列 CycloneIII,在窗口右边的三个下拉列表框选择过滤条件,分别选择Package 为 FBGA、Pin count 为 484 和 Speed grade 为 8,点击 Next,如图所示(5)工具设置:进入 EDA 工具设置窗口,有三个选项,分别是选择输入的 HDL 类型和综合工具、选择仿真工具、选择时序分析工具,这是除 Quartus II 自含的所有设计工具以外的外加的工具,如果不作选择的,表示仅选择 Quartus
7、II 自含的所有设计工具,本次不需要其他的设计工具,可以直接点击 Next(6)结束设置:进入“工程设置统计”窗口,列出了与此工程相关的设置情况,设置完成,点击 Finish(二) 、编译配置好后就可以进行编译了,点击 ProcessingStart Compilation 命令 启动全程编译编译成功后的界面如图所示(三)时序仿真(1 )打开波形编辑器:FileNewVerification/Debugging FilesVector WaveformOK,即出现空白的波形编辑器,如图所示(2)设置仿真时间区域:EditEnd Time 在 Time 栏中输入 50,单位选择“us” ,点击确
8、定并保存波形文件(3)将工程 DIV16 的端口信号名选入波形编辑器中:ViewUtility windowsNode Finder,在 Filter 框中选 Pins:all(通常是默认选项) ,然后点击 List,则显示出了所有引脚,如图所示将重要的端口名拖进波形编辑器后关闭窗口,如下图(4)编辑输入波形:首先进行总线数据格式设置和参数设置:点击输入数据信号 A 的左边的+号,能展开此总线中的所有信号;如果双击此+号左边的信号标记,将弹出对该信号数据格式设置的Node Properties 对话框,在该对话框的 Radix 下拉列表中有四种选择,这里可选择十进制表达方式,将 A、B 均设置
9、为十进制表达方式。设置时钟信号其次输入波形数据:由于 A、B 需要设置输入数据。用鼠标在图所示信号名 A、B 的某一数据区拖拉出来一块蓝色区域,然后单击左侧工具栏的问号(?)按钮,在弹出窗口输入数据,如 0.继而在不同区域设置不同数据。这里为方便观察,A 中输入的数据依次是4、5、7、10、22、25、32、40、47、122、200。对应 B 中输入的数据依次是1、3、4、5、7、10、7、5、6、11、15。如图所示(5)仿真仿真器参数仿真:选择 AssignmentSettings 命令,在 Settings 窗口下选择Category Simulator Settings。在右侧的 S
10、imulation mode 下拉列表中选择 Timing,即选择时序仿真,并选择仿真激励文件名 DIV16.vwf。选择 Simulation Period 栏,确认选中了“Run simulation until all vector stimuli are used” 。启动仿真器:ProcessingStart Simulation ,直至出现 Simulation was successful,仿真结束,然后会自动弹出“Simulation Report”,注意这里点击输出信号“DIV16”旁边的“+” ,展开总线中的所有信号,可以更利于我们观察和分析波形。(四)应用 RTL 电路图观察器操作方法步骤为:ToolsNetlist ViewersRTL Viewer。五、实验总结编写代码时要注意用规范的语言,尽量避免严重警告现象的出现。在最后编辑波形时,要选择合适的数值,使波形一目了然。在学习 FPGA 时,要有一定的提前量,自己在课下要多钻研,尝试去编写代码,利用QuartusII 软件自己进行实验操作,找出错误分析错误原因,这样才能不断进行,从而更熟练得掌握这门语言。