收藏 分享(赏)

实验三:quartus入门.doc

上传人:gnk289057 文档编号:9138707 上传时间:2019-07-25 格式:DOC 页数:24 大小:2.25MB
下载 相关 举报
实验三:quartus入门.doc_第1页
第1页 / 共24页
实验三:quartus入门.doc_第2页
第2页 / 共24页
实验三:quartus入门.doc_第3页
第3页 / 共24页
实验三:quartus入门.doc_第4页
第4页 / 共24页
实验三:quartus入门.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、八位乘法器在 quartus 上的实现一 实验目的:设计一个实现两个 8bit 无符号二进制数相乘的硬件乘法器。并在 quartus 上实现编译,功能仿真,引脚布置。二 实验要求:在完成“8bit 无符号数串行硬件乘法器模块设计”的功能仿真基础上实现该模块,即分配芯片管脚,设置设计约束,综合实现该设计。查看设计的资源使用情况,进一步查看静态时序分析报告,分析芯片管脚的建立、保持时间要求。使用辅助设计工具查看设计实现结果,加深对设计的理解。三 实验原理:用移位相加来实现,实现 RTL 设计的第一步是把设计分成数据部分和控制部分。数据部分包含数据单元和总线结构,控制部分通常是产生控制信号的状态机,

2、而这个控制信号用来对数据进行操作。本设计依此分为两个部分,控制块 multiply_ctl,数据路径 multiply_data。四 实验步骤:1、 算法模型:2、功能模块引脚设置如下: 功能模块输入信号: Reset:复位,Clk:时钟,St:启动信号,Mul:乘数,Muld :被乘数。输出信号:Done:运算结束信号,Product:运算结果。实验步骤:1首先安装 quartus 软件。#首先安装 Quartus II 8.0 (32-Bit):#用 Quartus_II_8.0_b215 破解器.exe 破解 C:altera80quartusbin 下的sys_cpt.dll 和 qu

3、artus.exe 文件(运行 Quartus_II_8.0_b215 破解器.exe 后,直接点击“应用补丁” ,如果出现“未找到该文件。搜索该文件吗?” ,点击“是” ,然后选中 sys_cpt.dll,点击“打开” 。安装默认的sys_cpt.dll 路径是在 C:altera80quartusbin 下) 。#把 license.dat 里的 XXXXXXXXXXXX 用您老的网卡号替换(在Quartus II 8.0 的 Tools 菜单下选择 License Setup,下面就有 NIC ID)。#在 Quartus II 8.0 的 Tools 菜单下选择 License Set

4、up,然后选择 License file,最后点击 OK。#注意:license 文件存放的路径名称不能包含汉字和空格,空格可以用下划线代替。2.程序的编辑于编译双击桌面上的 quartus 图标(如右图所示) ,打开 quartus 界面。新建一个工程,在第一栏中输入 Verilog 文件所在的路径(最好每建一个工程就建一个文件夹,把相关文件放在一起) ,第二栏中输入工程名,第三栏输入顶层实体名,工程名和顶层实体名必须一致。然后点击next。进入到下一个界面,直接点击 next,如果源文件已经创建好了,可以点击 ADD 直接添加。点击 next 进入下一个步,在 family 中选择 Cyc

5、lone 系列,在 name 中任选一个器件,在 next。下面的对话框让你选择第三方的 EDA 软件,直接 next,进入下一步。这一步显示了上面基本设置的全部信息, 点击 finish 完成工程的创建。3程序的编辑,新建一个文本文件,输入源程序,保存为*.v 文件,并添加到工程里面,可以看到 multiply 前面出现一个加号,点击就可以看到它包含的 2 个实体然后点击工具栏中的编译按钮( )进行编译,编译成功后窗口最下面信息栏显示:窗口中自动弹出编译报告和报告成功页面,如下图所示:3 波形仿真: 新建一个波形文件,在下面的树形图中选择 vectorwaveform file,双击就可建立

6、一个波形文件波形文件页面如下所示:在右边窗口的空白出单击右键,选择insertNode or Bus弹出下面的对话框, 单击右边的 Node Finder弹出下面的对话框在 Filter 中选择 pin: all,在点击 List,出现下面的窗口,按住 ctrl 建选择所要添加的输入输出端口的名字,单击 把端口添加到右边的窗口中,结果如图所示:点击 ok,再点击 insert Node or Bus 窗口中的 ok,就把输入输出信号添加到了波形窗口,如同所示:拖动端口名字,将输入放在上面,输出放在下面,结果如右图所示:然后设置 clk,点击左边工具栏里面的 ,出现 clk设置对话框,如下图所示

7、:里面又仿真开始和终止时间设置,还有周期 period,相位 offset,占空比 Duty cycle点击 ok,选择默认设置就行。选中 reset,点击 ,将复位设置为低电平,点击 ,将启动信号 st 设置为高电平,接着然后选中 按钮,调节放大比例,便于给 mul和 muld 赋值,选中 mul,在 0120ns 之间赋值,点击选中这段区域,双击,出现赋值对话框,如右图所示:在 Radix:中选择 Unsiged Decimal,在 Numeric or named value:中输入所以赋值的十进制数值,用同样的方法给 muld 赋值。赋值结束后保存设置。然后点击 processing菜

8、单下面的 Stimulatortool,出现右边的对话框:在 Simulation 中选择 Functional,点击右边的 Generate Functional Stimulator Netlist 生成功能仿真网表。最后点击 开始功能仿真,仿真结果如下:调整 product 的进制为 unsigned Decimal,观察输出的结果与预期的是否一致,直至与实际相符为止。接着进行时序仿真:然后点击 processing 菜单下面的 Stimulator tool 对话框中选择 timing,点击开始进行时序仿真。结果如下:4管脚设置: 然后点击工具栏里面的 ,出现下面的页面点击右边页面中的

9、 ,弹出对话框,如下:点击 Configuration 出现选中 Use configurationDevice 前面的对话,选中 Auto;并且选中下面的 Generate compressed Bitstreams。再点击 unused pins,将无用管脚设置为高阻态(As input tri-stated) ,然后“确定” 。然后点击左边的 timing Analysis Settings,单击 Classic Timing Analyzer Settings,出现窗口如下图所示点击独立时钟设置按钮,出现下面的对话框,进行设置。管脚分配结果如上图所示。资源编辑器查看布局结果配置文件和工

10、具程序内容:module multiply8 (reset,clk,st,mul,muld,done,product);input reset,clk,st;input 7:0mul,muld;output done; output 15:0 product;wire load,sh,ad,m;my_mult_data U1(.reset(reset),.clk(clk),.mul(mul),.muld(muld),.load(load),.sh(sh),.ad(ad),.m(m),.product(product);my_mult_ctl U2(.reset(reset),.clk(clk)

11、,.st(st),.m(m),.load(load),.sh(sh),.ad(ad),.done(done);endmodulemodule my_mult_data(reset,clk, mul, muld, load, sh, ad, m,product);input reset,clk,load,sh,ad; input 7:0 mul,muld; output m; output 15:0 product;reg 16:0 acc; wire 8:0 sum;wire 15:0 product1;assign sum = 1b0,muld+acc16:8;assign m = acc0

12、;always (posedge reset or posedge clk)beginif(reset=1b1)acc=17d0; else if(load =1b1)acc=9b00000,mul; else if(ad =1b1)acc16:8= sum; else if(sh =1b1)acc=1b0,acc16:1;end assign product1 = acc15:0;assign product=(mul7=1b0)?(product11):product1;endmodulemodule my_mult_ctl(reset,clk, st, m, load, sh, ad,

13、done);input clk,reset,m,st; output load,sh,ad,done;reg load,sh,ad,done; reg k;integer cnt; parameter1:0 S0=2b00, S1=2b01, S2=2b10, S3=2b11;reg 1:0 state, next_state;always (st or k or m or state)beginload=0; sh=0; ad=0; done=0;case(state)S0: if( st=1b1) begin load=1b1;next_state=S1; endelsenext_stat

14、e=S0;S1: if( m=1b1) begin ad=1b1; next_state=S2; endelsebegin sh=1b1; if(k=1b1) next_state=S3;elsenext_state=S1;endS2: begin sh=1b1; if(k=1b1) next_state=S3;elsenext_state=S1; endS3: begin next_state=S0; done=1b1; endendcaseendalways (posedge reset or posedge clk)begin if (reset=1)state=0;elsestate=next_state;endalways (posedge clk or posedge load)begin if (load=1b1) begin cnt=0; k=0; endelse if (cnt=7)k=1;else if (sh=1b1) cnt=cnt+1;endendmodule

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报