赞
踩
本系列所有博客,知识讲解、习题以及答案均由北航计算机学院计算机组成原理课程组创作,解析部分由笔者创作,如有侵权联系删除。
从本节开始,课程组给出的教程中增添了很多视频讲解。为了避免侵权,本系列博客将不会搬运课程组的视频讲解,而对于文字讲解也会相应地加以调整,重点在于根据笔者自己的理解给出习题的解析。因此带来的讲解不到位敬请见谅。
1、下载地址:
官网地址:官网下载地址 (在Version中选择14.7而非14.7(Windows 10),由于win10版本ISE使用了虚拟机,可能会出现难以预料的问题,请勿下载win10版本的ISE)
内网地址:
Linux版ISE内网下载地址:Linux版内网下载地址
Windows版ISE内网下载地址:Windows版内网下载地址
2、官网下载流程:
(1)下载方式有两种,第一种是分段下载,如下图所示:
(2)这里推荐的是不分段下载,在分段下载的下方,如下图:
(3)直接按照平台分别选择Windows或者Linux即可。
(4)下载前需要你填一个调查问卷,建议好好填写。
(5)填写完点击下载即可。并且需要注册。
(6)接下来去邮箱进行激活。
(7)激活后登录,关闭登录后页面,重新打开下载的网址,可能需要重新输入一遍以上流程,包括选择下载、填写问卷,填完之后就不会再让你登录了,而是让你填用户信息,虽然麻烦,还是填一遍吧。
(8)点击Next之后,下载就会自动开始。
(9)也可以复制链接使用特定工具下载:特定工具下载示例 这里的链接仅仅是示例,因为每一个生成的链接都有有效期
3、获取license
在安装完成之后可能会询问license,我们可以使用下载软件时注册的账号到官网申请一个一定时长的免费license。根据官网提示操作即可。如下图。
一、ISE的安装(Windows) 于Windows8下检验正确
在Windows下的安装过程可以参考如下截图:
之后还会有关联MATLAB的对话框,如果大家电脑有装过合适版本的MATLAB,可以对它进行关联,或者以后再关联,这里选择“Ok”跳过
选择之前下载的证书文件即可
二、ISE的安装(Linux) 于Ubuntu14.04LTS下检验正确
如果是图形界面,下载好了,解压直接安装,和Windows无异。如果是服务器,刚才获取到了下载的链接,在有效期内使用命令: wget url url就是你刚才的链接(形如上面的链接) 然后需要安装VNC,配置xhost等一系列活动,有兴趣的同学可以自行学习。
主要是**Win8/8.1/10 ISE _pn.exe crash-**崩溃问题
Windows 8/8.1/10 ISE在产生对话框的时候会崩溃,这种情况会发生在"Load License"这一步,或使用软件时的"Open a Project",(可以参见下方的截图)等者其他需要产生对话框的过程。
解决方案一:
(1) 寻找安装Xilinx_ISE的安装目录下的文件夹:
D:\Xilinx\14.7\ISE_DS\ISE\lib\nt64
对文件夹下的两个文件作如下操作:
将 libPortability.dll 重名为 libPortability.dll.orig
将 libPortabilityNOSH.dll 复制一份下一步用,然后将这个文件重命名为 libPortability.dll
(2) 寻找安装Xilinx_ISE的安装目录下的文件夹:
D:\Xilinx\14.7\ISE_DS\common\lib\nt64
将 libPortability.dll 重名为 libPortability.dll.orig
然后将已经复制好的 libPortabilityNOSH.dll 文件复制到该文件夹下,并重命名为 libPortability.dll
解决方案二:
(1)修改快捷方式
修改这个快捷方式的路径如下:
把\nt64\ise.exe改成\nt\ise.exe
(2)修改MinGW的版本
a.将原来的nt文件夹改成nt_bak来备份,新建一个nt文件夹。具体路径:安装盘:\Xilinx\14.5\ISE_DS\ISE\gnu\MinGW\5.0.0\nt
b.将这里的MinGW5.1.4安装到刚才建立的nt文件夹里。下载地址[http://sourceforge.net/projects/mingw/files/OldFiles/MinGW%205.1.4/MinGW-5.1.4.exe/download?use_mirror=iweb](http://sourceforge.net/projects/mingw/files/OldFiles/MinGW 5.1.4/MinGW-5.1.4.exe/download?use_mirror=iweb)
c.下载之后点MinGW-5.1.4.exe安装到刚才建立的nt文件夹里。
其他安装错误可以在Xilinx论坛寻找问题解决方案:
https://www.xilinx.com/support/answer-navigation/design-tools/install.html
如何定义模块:工程管理视窗单击右键 -> New source -> Verilog Module
小蔡在为他计组课设的CPU编写ALU单元时,需要的ALU单元规格如下(他不会的地方空出来了):
这是他创建新模块时进行端口设置的截图:
请问在满足单元规格的条件下,x处可填入的最小数是?
答案:3
OP信号指定最多16 = 24 种运算符,那么至少需要4位信号进行选择,而ISE中端口设置多位信号时需要指定其最高位和最低位,4位信号最低位为0时最高位为3。
在几周后的计组实验P6中,你将模拟CPU的乘除单元。由于乘除单元的内部在实际电路中运算通常采用流水线的设计,乘法和除法通常需要多个周期才能得出结果。为了避免对乘除单元内部流水线的干扰,设计人员用Busy信号来表示单元是否正忙。下面是乘除单元(MD)的设计规格 :
请找出下图中与表格不符的所有条目。
答案:Busy
根据题意,Busy是正在运算的状态信号,应当是输出,并且只有1位,Bus选项不应该勾选。除此外其他信号设置无误。
ISE会根据我们的模块定义生成模块的部分代码,有时我们需要根据需求对生成的代码进行改动,下面是小蔡同学Define Module时的截图和生成的代码,你看出来他第几行进行了改动吗?(仅考虑你认为对编译器有意义的改动)
答案:5
在图形界面设置端口时,ISE会将端口全部设置为Wire类型,而在代码中第5行将output的cnt信号为reg类型,应当是依据模块需求将输出设置为reg类型。
刚进入新手村的小王,兴致勃勃的写了一个加法器,可是在端口设置上就出现了臭虫,你能帮助小王找到臭虫在哪儿吗?
答案:第6行
在Verilog的端口定义上,有时我们会增加会删减相关定义,但是最后一个定义是没有逗号结尾的,这个大家在修改自己的设计时需要注意。
在写加法器的时候,小王想写一个四位的加法器,但是在端口上,不知道怎么改位宽,你可以帮帮他吗?
请选择正确的输入端口位宽设置:
A. intput A1 [4:0]
B. intput A1 [3:0]
C. intput [4:0] A1
D. intput [3:0] A1
答案:D
端口设置的格式中位宽在端口名称之前,而位宽指定的是最高位和最低位,4位加法器最高位3最低位0,因此选择D。
小王在探索的时候,无意中发现了一本秘籍,可以自动化生成端口,他现在要写一个支持10种运算的ALU,那么在设置的时候,x处可填入的最小数是多少?
答案:3
支持10种运算的ALU至少需要4位信号进行选择,最低位为0时最高位至少为3.
ISE中内嵌的语言模板包括了大量的开发实例以及FPGA语法的介绍和举例。
语言模板不仅可在设计中世界使用,还是辅助FPGA开发的工具手册。
选择Edit -> Language Templates打开语言模板
或者选择的快捷方式
在后续的project中,我们需要将机器码导入我们的ISE工程中,这时就需要用读取文件的指令,并且我们从mars中导出的机器码格式为16进制,那么下面要将code.txt文件的数据加载进my_memory,哪一句是正确的?
note:Make sure you select all of the correct options—there may be more than one!
A. initial $readmemh(“code.txt”,my_memory)
B. initial $readmemh(my_memory,“code.txt”)
C. initial $readmemb(my_memory,16,"code.txt)
D. initial $readmemh(“code.txt”,my_memory,128,1)
E. initial $readmemb(“code.txt”,my_memory,128,1)
答案:A、D
上图是Language Template中相关的信息,可以看到$readmemb/h的参数依次是数据文件路径、目标寄存器、起始地址和终止地址,其中起始地址和终止地址是可选项,因此该语句有三种用法:$readmemb/h("<数据文件名>",<存储器名>); $readmemb/h("<数据文件名>",<存储器名>,<起始地址>); $readmemb/h("<数据文件名>",<存储器名>,<起始地址>,<终止地址>); 而导入格式为16进制,上面的选项中A、D是正确的。
小王正在探索新手村,偶然发现,有一个关键词叫做display,而它竟然和printf的作用是一样的,好奇的小王便开始玩display,请查阅语言模板,找到display的相关用法,并指出下列中正确的指令。
A. $display(“hello jizu!”)
B. $display(“hello jizu! My ID is %h”,student_id)
C. $display(“hello jizu! My name is %s”, “xiao ming”)
D. $display(“hello jizu! The time is %x”,time)
答案:A、B、C
上图是Language Template中相关的信息,$display与C语言中printf的用法非常相似,但控制符有所不同,上图右侧给出了引用参数的控制符,可以发现表示时间应当使用%t,其它三个选项的使用均正确,选择A、B、C。
新建测试模块:工程管理视窗单击右键 -> New source -> Verilog Test Fixture
在自动生成的文件中编写测试代码, 工程管理视窗选择 Simulation,双击下方 Behavioral Check Syntax,检查通过后,再双击 Simulate Behavioral Model 即可使用ISim进行仿真。
阅读下面仿真代码,此模块功能是测试时钟信号
为了使clk信号每1ns变化(取反)一次,?处应该填入什么内容
答案:always
使用always语句实现每隔1时间执行clk信号取反。
阅读下面仿真代码,此模块功能是测试加法器(请避免输出非必需的空格和符号)
为了实现该模块的功能,? 处应该填入什么
答案:reg b;
为了实现该模块的功能,?? 处应该填入什么
答案:.a(a),
在测试模块中,首先定义两个reg类型变量a和b,作为交给待测试模块的输入,再定义wire类型变量c用来接收待测试模块的输出,随后将待测试模块实例化,其输入输出与刚才定义的变量对应,然后在initial模块中对我们定义的a和b变量赋值,仿真开始后我们可以观察到c信号的值,以验证待测试模块是否输出正确的值。
在仿真的时候,往往需要设置变化的时钟,小王便写了下述的仿真代码,请问以下代码是正确的吗?
在这里插入图片描述
答案:错误
需要注意,always模块是不能嵌套在initial模块中的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。