当前位置:   article > 正文

北航计算机组成原理课程设计-2020秋 PreProject-Verilog HDL与ISE-ISE的获取和使用_3. 4位加法器 不知从何时起,北航计算机学院15级学生高小明同学迷上了计算机硬件的

3. 4位加法器 不知从何时起,北航计算机学院15级学生高小明同学迷上了计算机硬件的

北航计算机学院-计算机组成原理课程设计-2020秋

PreProject-Verilog HDL 与 ISE

ISE的获取和使用


本系列所有博客,知识讲解、习题以及答案均由北航计算机学院计算机组成原理课程组创作,解析部分由笔者创作,如有侵权联系删除。


从本节开始,课程组给出的教程中增添了很多视频讲解。为了避免侵权,本系列博客将不会搬运课程组的视频讲解,而对于文字讲解也会相应地加以调整,重点在于根据笔者自己的理解给出习题的解析。因此带来的讲解不到位敬请见谅。


ISE的下载

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的安装

一、ISE的安装(Windows) 于Windows8下检验正确

在Windows下的安装过程可以参考如下截图:

  1. 欢迎界面

在这里插入图片描述

  1. 接收所有条款后我们选择如下的安装选项:ISE Design Suite Edition

在这里插入图片描述

  1. 安装配置,这里勾选所有的选项

在这里插入图片描述

  1. 选择安装路径,注意安装路径不要有中文

在这里插入图片描述

  1. 确认信息后就是漫长的等待过程,大约安装时间需要40分钟左右。在进度为80%-90%的时候会蹦出一系列对话框,包括配置通信软件安装WinPcap等,都直接顺着“Next”下去即可。

在这里插入图片描述

之后还会有关联MATLAB的对话框,如果大家电脑有装过合适版本的MATLAB,可以对它进行关联,或者以后再关联,这里选择“Ok”跳过

在这里插入图片描述

  1. 配置证书,这里选择“加载已有证书”

在这里插入图片描述

在这里插入图片描述

选择之前下载的证书文件即可

在这里插入图片描述

  1. 完成安装后,桌面上应该会出现两个图标,右侧就是我们所提到的ISE,而左侧是仿真时需要用到的。

在这里插入图片描述

二、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

在这里插入图片描述

端口设置练习

ALU端口设置

小蔡在为他计组课设的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语法的介绍和举例。

  • Verilog HDL/ HDL常用模块
  • 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用法

小王正在探索新手村,偶然发现,有一个关键词叫做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模块中的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/615978
推荐阅读
相关标签
  

闽ICP备14008679号