4位移位寄存器的设计与实现使用ISE软件进行设计和仿真,并使用ISE软件设计和实现4位移位寄存器。
步骤
1.写一个文本文件并编译它
2.软件模拟
3.硬件配置
原则
1.ISE软件是支持数字系统设计的开发平台。
2.用ISE软件设计开发时,是基于相应的器件型号。
注:软件设计时选择的器件型号与实际下载板上的型号相同。3.图6-1显示了4个数字。
(1)双击桌面上的“ISE Design Suite 14.7”图标,启动ISE软件(也可以从开始菜单启动)。每次打开ISE,都会默认回复到最近使用的工程界面。第一次使用时,因为没有历史项目记录,所以项目管理区是空白的。选择文件新建-项目选项,输入项目名称,并在弹出的对话框中指定项目路径。
点击下一步按钮进入下一页,选择所使用的芯片和合成仿真工具。所有安装在电脑上用于仿真和综合的第三方EDA工具都可以在下拉菜单中找到。图中我们选择Spartan6 XC6SLX16芯片,采用CSG324封装,这是NEXYS3开发板使用的芯片。此外,我们选择Verilog作为默认的硬件描述语言。
点击下一步按钮进入下一页,显示新项目的信息。确认后,点击Finish建立一个完整的项目。
(2)设计输入和代码模拟在项目管理区的任意位置单击鼠标右键,在弹出菜单中选择New Source命令,选择Verilog模块输入,输入Verilog文件名。
单击下一步按钮进入端口定义对话框。模块名称列用于输入模块名称,这里是shiftreg,下面的列表框用于定义端口。端口名表示端口名,方向表示端口方向(可选择输入、输出或inout),MSB表示信号的最高位,LSB表示信号的最低位,单个信号的MSB和LSB不需要填写。当然,端口定义的这一步
我们也可以跳过它,添加到源程序中。
定义好模块的端口后,点击下一步进入下一步,点击完成完成创建。这样ISE就会自动创建一个Verilog模块的模板,并在源代码编辑区打开。简单的注释、模块、端口定义已经自动生成,接下来的工作就是完整的写代码了。
输入代码后,我们还需要测试模块。在项目管理区将view设置为Simulation,右键单击任意位置,在弹出菜单中选择New Source,在type中选择Verilog Test Fixture,输入测试文件名,点击Next。这时,项目中的所有模块名称都会显示出来,我们选择要测试的模块。单击下一步,然后单击完成。ISE会在源代码编辑区自动生成测试模块的代码。我们可以看到ISE已经自动生成了基本信号,并实例化了被测模块。我们的工作是在初始化块中的“//此处添加模拟”之后添加一个测试向量。
编辑完测试文件后,确认项目管理区的查看选项设置为模拟,然后与模拟相关的流程就会显示在流程管理区。右键单击模拟行为模型项,在弹出菜单中选择流程属性项,会弹出属性设置对话框,其中模拟运行时间是模拟时间的设置,可以修改为任意长度。
设定好模拟参数后,就可以进行模拟了。首先,在项目管理区域中选择测试代码,然后双击流程管理区域中的模拟行为模型。ISE将启动ISE模拟器,并可获得模拟结果,如图6-2所示。
(3)合成与实现在项目管理区的视图中选择实现,然后在流程管理区双击合成-XST,开始合成流程。
另外,为了实现设计,需要在模块中对输入输出信号添加管脚约束,这就需要在项目中添加UCF文件。在项目管理区域中单击鼠标右键,单击“新建源”,然后选择“实现-约束文件”。出现一个空白约束文件,我们可以为设计添加各种约束。如果综合步骤没有语法错误,XST可以给出资源消耗的初步情况。单击“设计概要”进行查看。
双击流程管理区域中的实施设计选项,自动完成实施步骤。如果设计没有集成,将启动XST来完成集成,集成后将完成实施过程。实施后,可以获得准确的资源占用。具体的资源占用可以在设计总结中看到。
(4)器件配置硬件配置是FPGA开发中最关键的一步。只有将HDL代码下载到FPGA芯片中,才能进行调试,最终实现相应的功能。首先,我们必须生成一个可以下载到硬件的二进制位文件。在工艺管理区双击生成编程文件,ISE会为设计生成相应的二进制位文件。
然后用USB-MiniUSB线为开发板提供电源和数据下载。我们可以通过在线下载免费的Digilent Adept软件,在Nexys3开发板上快速配置FPGA。用USB-MiniUSB线连接开发板和PC,打开开发板的电源开关,然后启动Digilent Adept软件。系统开始自动连接FPGA设备。成功检测到设备后,将显示JTAG链中使用的芯片。
界面会显示已经检测到NEXYS3开发板上的FPGA(XC6SLX16)。这里我们配置FPGA。在浏览中找到之前生成的设计的二进制位文件,点击旁边的程序按钮,软件开始配置FPGA。配置成功后,以下状态栏将显示编程成功。此时,设备配置成功,我们可以验证预期的设计是否在设备上很好地实现。
移位寄存器代码移位寄存器,不仅可以寄存数字代码,而且寄存的数字代码在脉冲信号的作用下可以根据需要进行移位。本设计采用分频后的信号作为脉冲信号,在人眼的视觉范围内(始终低于10Hz)控制配准的自动移位。代码如下:
模块设计_代码(
《span style=“white-space:pre”》 《/span》输入时钟,《span style=“white-space:pre”》 《/span》//通过“V10”输入
《span style=“white-space:pre”》 《/span》输入clr
《span style=“white-space:pre”》输入数据,
《/span》输出寄存器[3:0] out
);
《span style=“white-space:pre”》 《/span》
reg[26:0]c;
赋值mclk=c[5];《span style=“white-space:pre”》 《/span》 //模拟的数据《span style=“white-space:pre”》 《/span》
//赋值mclk=c[26];《span style=“white-space:pre”》 《/span》//便于人们辨别
始终@ (posedge时钟)
开始吧
《span style=“white-space:pre”》 《/span》//c"=c 1;
《span style=“white-space:pre”》 《/span》 if(clr)
《span style=“white-space:pre”》 《/span》 c"=0;
《span style=“white-space:pre”》
《/span》 《span style=“white-space:pre”》 c"=C1 ' B1;
《/span》
始终@ (posedge mclk或posedge clr)
开始吧
《span style=“white-space:pre”》 《/span》 if(clr)
《span style=“white-space:pre”》 《/span》 out"=4 ' B0;
《span style=“white-space:pre”》
《/span》 《span style=“white-space:pre”》 out"={ data,out[3:1]};
《/span》
末端模块
本设计中使用了非阻塞赋值“=”。它不同于阻塞赋值“=”。
分块赋值:等式Y=B .一旦执行当前赋值语句,就给几个目标变量Y赋值,得到等号右边表达式的计算值。这里值得注意的是,如果一条语句包含多条阻塞赋值语句,那么当执行一条语句时,其他语句都会被阻塞,执行将被禁止。阻塞赋值的执行有点像串行执行
非阻塞赋值:公式y"=b"必须在语句块的末尾完成。在执行语句时,对语句块中的其他赋值表达式没有限制,换句话说,语句块中的非阻塞赋值表达式是并行执行的。
注意:因为赋值不能引导语句块,所以只能使用阻塞赋值。
注意:阻塞赋值和非阻塞赋值不能混用。
测试文件:初始开始
//初始化输入
数据=1;
clr=1;
clk=0;
结束
总是
开始
#1
clk=~ clk
结束
总是
开始
#100000
clr=~ clr
结束
总是
开始
#500
数据=~数据;
结束
注意:编写模拟零件时,always和initial不能相互嵌套。当使用复位信号(如clr)时,X先使能复位信号,一段时间后再取消复位信号(避免系统一直处于复位状态)。
模拟结果:
这里模拟可能要花很长时间。您可以通过调整模拟器的属性来更改模拟时间,如下所示
标签:文件项目ISE