高速硬件除法器设计文档格式.docx
《高速硬件除法器设计文档格式.docx》由会员分享,可在线阅读,更多相关《高速硬件除法器设计文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
否则,结果商位为1,则把相减后的余数插入变量A中。
不管比较结果如何,变量A都要右移一位(左边添加0),接着开始下一次循环。
循环n次之后,n位结果赋给商,最后A剩余的值就是余数。
三、实验任务:
用VerilogHDL设计除法器。
除法器的参考程序如下:
moduleDIV16(inputCLK,input[15:
0]A,B,outputreg[15:
0]QU,RE);
reg[15:
0]AT,BT,P,Q;
integeri;
always(posedgeCLK)begin
AT=A;
BT=B;
P=16'
H0000;
Q=16'
for(i=15;
i>
=0;
i=i-1)
begin
P={P[14:
0],AT[15]};
AT={AT[14:
0],1'
B0};
P=P-BT;
if(P[15]==1)beginQ[i]=0;
P=P+BT;
end
elseQ[i]=1;
always(*)beginQU=Q;
RE=P;
endmodule
其中A和B是除法器输入端的两个16位数据,它们分别为被除数和除数,输出结果分成两部分:
QU是商,RE是余数。
给出仿真时序波形图。
四、实验步骤:
实验步骤大致分为三大步。
(一)、建立工作库文件和编辑设计文文件
任何一项设计都是一项Project(工程),我们一般把一个工程下的所有文件放在一个文件夹,这样方便我们整理,利用和提取不同工程下的文件,而此文件夹将被EDA软件默认为WorkLibrary(工作库),所以第一步先建立一个新的文件夹。
(1)新建文件夹:
在F盘建立并保存工程,文件夹取名homework。
(2)输入源程序:
打开QuartusII,选择菜单File-->
New-->
DesignFiles-->
VerilogHDLFile-->
OK(如图所示)
在打开的空白处工作框处输入任务要求中所列出的代码。
(3)保存文件:
选择File-->
Saveas,选择保存路径,即刚才新建的文件夹homework,文件名应与实体名保持一致,即DIV16,点击保存后会跳出“Doyouwanttocreateanewprojectwiththisfile?
”选择“是”,则进入如下界面
点击Next,进入“工程设置”对话框,如图所示
第一行表示工程所在的文件夹,第二行为工程名,可以与顶层文件的实体名保持一致,也可以另取别的名字,第三行为当前工程顶层文件的实体名。
点击next,进入ADDFILE对话框,如图所示,单击AddAll按钮,将工程相关的所有VHDL文件加进工程,也可以单击“Add
...”选择性加入,按此步骤建立工程,工程已经自动将所有文件加进去了,可以直接点击next,当先直接建立工程时,需要自己添加
(4)选择目标芯片:
这里选用的是CycloneIII系列的EP3C55F484C8,在Family栏选择芯片系列——CycloneIII,在窗口右边的三个下拉列表框选择过滤条件,分别选择Package为FBGA、Pincount为484和Speedgrade为8,点击Next,如图所示
(5)工具设置:
进入EDA工具设置窗口,有三个选项,分别是选择输入的HDL类型和综合工具、选择仿真工具、选择时序分析工具,这是除QuartusII自含的所有设计工具以外的外加的工具,如果不作选择的,表示仅选择QuartusII自含的所有设计工具,本次不需要其他的设计工具,可以直接点击Next
(6)结束设置:
进入“工程设置统计”窗口,列出了与此工程相关的设置情况,设置完成,点击Finish
(二)、编译
配置好后就可以进行编译了,点击ProcessingStartpilation命令
启动全程编译
编译成功后的界面如图所示
(三)时序仿真
(1)打开波形编辑器:
File-->
Verification/DebuggingFiles-->
VectorWaveform-->
OK,即出现空白的波形编辑器,如图所示
(2)设置仿真时间区域:
Edit-->
EndTime在Time栏中输入50,单位选择“us”,点击确定并保存波形文件
(3)将工程DIV16的端口信号名选入波形编辑器中:
View-->
Utilitywindows-->
NodeFinder,在Filter框中选Pins:
all(通常是默认选项),然后点击List,则显示出了所有引脚,如图所示
将重要的端口名拖进波形编辑器后关闭窗口,如下图
(4)编辑输入波形:
首先进行总线数据格式设置和参数设置:
点击输入数据信号A的左边的+号,能展开此总线中的所有信号;
如果双击此+号左边的信号标记,将弹出对该信号数据格式设置的NodeProperties对话框,在该对话框的Radix下拉列表中有四种选择,这里可选择十进制表达方式,将A、B均设置为十进制表达方式。
设置时钟信号
其次输入波形数据:
由于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窗口下选择CategorySimulatorSettings。
在右侧的Simulationmode下拉列表中选择Timing,即选择时序仿真,并选择仿真激励文件名DIV16.vwf。
选择SimulationPeriod栏,确认选中了“Runsimulationuntilallvectorstimuliareused”。
启动仿真器:
Processing-->
StartSimulation,直至出现Simulationwassuccessful,仿真结束,然后会自动弹出“SimulationReport”,注意这里点击输出信号“DIV16”旁边的“+”,展开总线中的所有信号,可以更利于我们观察和分析波形。
(四)应用RTL电路图观察器
操作方法步骤为:
Tools-->
NetlistViewers-->
RTLViewer。
五、实验总结
编写代码时要注意用规的语言,尽量避免严重警告现象的出现。
在最后编辑波形时,要选择合适的数值,使波形一目了然。
在学习FPGA时,要有一定的提前量,自己在课下要多钻研,尝试去编写代码,利用QuartusII软件自己进行实验操作,找出错误分析错误原因,这样才能不断进行,从而更熟练得掌握这门语言。