1、 output cout; output3:0 s; reg cout,s; always(k) begin if(k = 1) cout,s = aa+bb+cin; else cout,s Spreadsheet view,打开 Spreadsheet view框.在 pin一栏中填入各输入输出映射的管脚.其中定义37、38、39、40.为数据输出显示位。54为进位位或借位位,控制键,52为加减法切换键。(5)烧录程序,器件实现:在Diamond主界面中,进入Tools-Programmer,在State栏出现 PASS,即说明烧写成功。4.实验结果及分析:1)用加减法运算符实现:在实验板
2、上可以看到,发光二极管在不带进位的情况下,即cin为0时,这时应按下实验板上控制进位位与借位位的按键54时,显示为1001,在不按下按键时,即进位位cin为1时为1010,可知带进位的加法器功能完全实现;在按下控制加减法器按键52,而且同时按下54时,为不带借位的减法器输出为1111,不按下54时,即为有借位位发光二极管显示为1110,可知带借位的减法器功能完全实现。2)位运算符实现:除控制加减法切换相反外,实验结果与上相同。综上所述,达到了实验所预定的功能。5.实验体会:1.对于硬件描述语言的学习的几点体会:(1)熟悉了verilog HDL程序的基本结构。(2)理解了Verilog HDL
3、使用一个或多个模块电路进行建模。其中,模块代表硬件上的逻辑实体,其范围可以从简单的门到整个大的系统。(3)在本次实验中用到了行为级描述方式的语句,明白了“always”的重复使用,有别于“initial”只能执行一次,主要用于仿真测试而不能用于逻辑综合。同时了解到不同的描述方式在程序中的排列先后次序是任意的。实际上,Verilog HDL语句有三种描述方式,在模块中可以使用下述三种描述方式的任意一种或几种组合1)数据流描述方式:在程序中用到的assign即是,其中,逻辑表达式右边的变量受到持续的监控,一旦这些变量中的任何一个发生变化,整个表达式就会被重新计算,并将变化值赋予左边的线网变量,对组
4、合逻辑电路使用该方式特别方便.2)行为级描述方式:只有寄存器类型的变量能够在,always, initial语句中被赋值,且在赋新值以前变量保持不变。所有的initial语句和aways语句都从0时刻并行执行。3)结构型描述方式:(4)结构极建模包括门级建模和分层次建模两种情况,门级建模就是将逻辑逻辑电路图用verilog HDL规定的文本语言描述出来.分层次的电路设计通常有自顶向下(Top-Down)和自底向上(BottomUp)的设计方法。本实验中我还采用了自底向上的方法,即先定义子模块然后调用它们组成顶层的减加器模块。2.关于lattice diamond 2。0使用:在实验中,在综合这
5、一步中应在主界面 Process窗口中双击 Translate Design,对所编辑的代码进行综合。但是我所用的机子中找不见,后来在该软件的windows窗口中进行设置后可恢复Translate Design选项。实验2:乘法器设计设计一个3位二进制乘法器.2.实验要求:要求:在软件环境下,编写源文件,参考教材用ISP器件设计现代电路与系统P266第3题。3.实验过程:(1) 原理分析:乘法器有多种实现方法,其中最典型的方法是采用部分项进行相加的方法,通常称为并行法。其原理是:通过逐项移位相加的原理实现,从最低位开始,若为1,则乘数左移后遇上一次的和相加;若为0,左移后以全零相加制止被乘数的
6、最高位。这种算法采用纯组合逻辑来实现,其特点是:设计思路简单直观、电路运算速度快,缺点是使用的逻辑思源较多。(2)Verilog HDL源文件设计:/module mult(chengshua,out); parameter beichengshub = 3b101; input 2:0 chengshua; output 5:0 out; reg 5: reg 2:0 beichengshub; integer i; always (chengshua) inb = 3b101; out = 0; for(i=0;i3;i=i+1) if(beichengshubi) out = out+(
7、chengshuaProgrammer,在State栏出现 PASS,即说明烧写成功。在实验板上可以看到,在54、53、52、50为信号输入键情况下,比如为1111时为例,这时应不按下实验板上控制位54、53、52、50,显示为0001;其他情况下,比如1010则输出为00000该结果与所需要达到的实验目的完全相同。可知序列检测器功能完全实现。综上所述,达到了实验所预定的功能. 本实验编写起来难度也不算太大。另外,需要注意引脚的分配,在分配din及clk引脚时,不能使用Y1/RESET,Y2/SCLK,因为这是系统自带的,当有自定义的clk时,我们只能使用I/O口来对其进行分配.通过本程序的编
8、写,自己对Verilog语言的编写有了更进一步的了解,程序的具体操作变得更加熟练。实验4:变模计数器设计设计模为 9,11,13,15 的可变模计数器。实验要求:能在键盘的控制下,实现变模计数。模可变计数器的逻辑是有一端为时钟输入,另一端为模式控制端,最多可以实现8种不同模式的计数方式,例如可以构成7进制、10进制、16进制、256进制等共八种计数模式。/ module mchang(clk,m,Q)input clk;input 2:0 m;output4:0 Q;integer cnt;assign Q=cnt;always(posedge clk)case(m)3b000:if(cnt9
9、) cnt=cnt+1;else cnt=0;3b001:if(cnt11) cnt=cnt+1;3b010:if(cntProgrammer,在State栏出现 PASS,即说明烧写成功。 图1:程序烧写成功截图在实验板上可以看到,在53、52、50为信号输入键情况下,比如为001时为例,这时应不按下实验板上控制位50键而去按下52,53键,此时为模数为9的可变计数器。当按下54键即clk时进行加数计算,当为10是返回0值。其余的情况与它类似不在赘述。同时,也可以用其他仿真工具来进行实验,得到如下的时序图。1)模为9时的计数器:(2)模为11时的计数器:(3)模为13时的计数器:(4)模为1
10、5时的计数器:可知变模计数器功能完全实现。综上所述,达到了实验所预定的功能。实验体会: 计数器实现模15计数。本程序中多次用到if else 语句,必须很清楚的理清每个if else语句的管辖范围,否则很容易出现错误而又检查不出来。引脚的分配同上次相同,不能使用系统自带的,只能用I/O口来进行分配。程序的编写中要注意always模块中被赋值的信号必须是reg型,而输出pout为wire型,是一个变量,还有等号是“=”,很容易误写为“=等等一些小细节,这些小细节都必须引起足够的重视。实验5:简易计算器设计设计模为 9,11,13,15 的可变模计数器.能在键盘的控制下,实现变模计数.模可变计数器的逻辑是有一端为时钟输入,另一端为模式控制端,最多可以实现8种不同模式的计数方式,例如可以构成7进制、10进制、16进制、256进制等共八种计数模式。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1