数字系统设计与veriloghdl课后答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字系统设计与veriloghdl课后答案【篇一:数字逻辑与数字系统设计习题参考答案】
>第1章习题解答
1.3 (1)86
(2)219
(3)106.25
(4)0.6875 (4)0.101
1.4 (1)101111
(2)1001000
(3)100001l.11
1.5 (1)(117)10=(165)8=(1110101)2=(75)16
(2)(3452)10=(6574)8=(110101111100)2=(d7c)16
(3)(23768.6875)10=(56330.54)8=(101110011011000.1011)2=(5cd 8.b)16 (4)(0.625)10=(0.5)8=(0.101)2=(0.a)16 1.6
(1)(117)8=(1001111)2=(79)10
(2)(7456)8=(111100101110)2=(3886)10
(3)(23765.64)8=(10 0111 1111 0101.1101)2=(10229.8125)10
(4)(0.746)8=(0.11111)2=(0.96875)10 1.7 (1)
(9a)16=(10011010)2=(154)10
(2) (3cf6)16=(11110011110110)2=(15606)10
(3) (7ffe.6)16=(111111*********.011)2=(32766.375)10 (4)
(0.c4)16=(0.110001)2=(0.765625)10 1-8
(1)(125)10=(000100100101)8421bcd
(2)(7342)10=(0111001101000010)8421bcd
(3)(2018.49)10=(0010000000011000.01001001)8421bcd
(4)(0.785)10=(0.011110000101)8421bcd
1.9
(1)(106)10=(1101010)2 原码=反码=补码=01101010 (2)(-98)10=(-1100010)2原码=11100010
反码=10011101 补码=11100011
(3)(-123)10=(-1111011)2 原码=11111011
反码=10000101 补码=11111011
(4)(-0.8125)10=(-0.1101)2 原码=1.1101000
反码=1.0010111 补码=1.0011000
1.10
(1)(104)10=(1101000)2 [1101000]补=01101000
(-97)10=(-1100001)2 [-1100001]补=10011111
01101000 + 10011111 00000111
10000011 + 01001111 11010010
[104-97]补=01101000+10011111=00000111, 104-
97=(00000111)2=7 (2) (-125)10=(-1111101)2
(79)10=(01001111)2
[-1111101]补=10000011 [01001111]补=01001111
01111000 [-125+79]补=10000011+01001111=11010010,-
125+79=(-0101110)2=-46 (3) (120)10=(1111000)2[01111000]补
=01111000
(-67)10=(-1000011)2[-1000011]补=10111101
[120-67]补=10000011+01001111=00110101,-
125+79=(00110101)2=53 (4) (-87)10=(-1010111)2[-1010111]补
=10101001
(12)10=(1100)2[1100]补=00001100
[-87+12]补=10101001+00001100=10110101,-125+79=(-1001011)2=-75
+ 10111101 00110101
10101001
+ 00001100 10110101
第2章习题解答
2.3 解:根据逻辑图可直接写出逻辑表达式:(a) f=ab?bc;(b)
f=abbcac
解:设3个输入变量分别为a、b、c,输出为f,按题意,其中有奇数个为1,则输出f=1,因此可写出其逻辑表达式为
f=abc?abc?abc?abc。
根据逻辑表达式可绘制逻辑习题2.3图如下:习题2.3图
2.4 解:根据逻辑图可直接写出逻辑表达式:(a) f=a?;(b)
f=abbcac 2.5 解:
(1) 若a+b=a+c,则b=c
不正确。
若a=1,b和c为不同值(如b=0,c=1或b=1,c=0),a+b=a+c仍然成立。
(2)若ab=bc,则a=c
不正确。
若b=0,a和c为不同值,等式仍然成立。
(3)若1+a=b,
则a+ab=b
不正确。
若1+a=b,则b=1,此时若a=0,则a+ab=0,不可能有
a+ab=b (4)若1+a=a,则a+ab=a+b
正确,因为若1+a=a,则a=1,无论b=0或b=1,均有a+ab=a+b 2.6 解:
(1)a+bc=(a+b)(a+c)
证明:右边=a(a+c)+b(a+c)=a+ac+ab+bc=a+bc=左边
(2)ab+a=(+b)(a+b)
证明:右边=aa+ab+a+b=ab+a=左边 (3)(ab+c)b=abc+abc+abc 证明:左边=ab+bc
右边=ab(c+c)+bc(a+a)=ab+bc=左边
(4)bc+ad=(b+a)(b+d)(a+c)(c+d)
证明:右边=(b+ab+bd+ad)(ac+c+ad+cd)
=(b+ad)(c+ad)
=bc+acd+abd+ad=bc+ad=左边
2.7 解:
(1) f=(a+b+c) (a+b+c) (a+b+c)
=(ab?ac?ab?bc?ac?bc?c)(a?b?c) =(ab?ab?c)(a?b?c) = =ab?bc?ac?abc (2) f=(b+d)(a+c)(b+d)
=(ab+ad+bc+cd)(b+d) =abd+bcd+abd+d (3) f=(?)(??)
=(??)(?) =ab?ac?abc?bc =ab?ac?bc (4) f=ab+b 2.8 解:
(1) f=abc?a(b?b)c?(a?a)bc =abc?abc?abc?abc?abc
=∑m(1,3,5,7)
(2) f= abcd+acd+ad
= abcd+ a(b+b)cd+a(b+b)(c+c)d
= abcd+ abcd+ abcd+abd+abd+abcd+abcd =
∑m(1,3,5,7,9,11,13)
(3) f=∑m(3,6,7,8,9,10,11,12,13,14,15) (4) f=∑m(3,11,12,13,14,15) (5) f=∑m(1,2,3,4,5,6) (6) f=∑m(4,7,8,11) 2.9 解:
(1)f?a?b?bcd?a?b?cd
(2)f?ab?bc?ac?ab?bc?abc?abc?ab?bc
(3)f?a(b?c)?bc?acd?a(bc)?bc?acd?a?bc?acd?a?bc
(4)f?(a?c)(a?d)?a?ac?cd?a?cd
(5)f?d?d?b?c?ad?b?d??b?c?ad?b?d?abd?acd?bc?d?bc
(6)f?abc?(a?b?c)d?abc?abcd?abc?d
(7)f?(ac?bc)ba?c?(ac?bc)(b?a?c)
(acbc)(bacac)abcacbcabcacbc
(8)f?(a?b)?(b?c)?ab?ab?bc?bc
abbcac 或=ab?bc?ac
2.10 解:(1) f=?ac(2) f=1 (3) f=bc?
ab
(4) f=ab?c?d
(6) f=bc+b
d
(5) f=abcd, f=a?b?c?d
(7) f=ab?bd?c
(8) f=ac?
bd
(2) f(a,b,c)=b?c
(3) f(a,b,c)=ac?
ac?b
2.11 解:(1) f(a,b,c)=a+b?c
(4) f(a,b,c,d)=a?bd
(5)f(a,b,c,d)=bd?ac?cd
(6) f(a,b,c,d)=bc?bc
【篇二:数字系统设计与verilog hdl课程设计】
设计题目:实用多功能数字钟
专业:电子信息科学与技术
班级:0313410
学号:031341025
姓名:杨存智
指导老师:黄双林
摘要
本课程设计利用quartusii软件verilog vhdl语言的基本运用设计
一个多功能数字钟,经分析采用模块化设计方法,分别是顶层模块、alarm、alarm_time、counter_time、clk50mto1、led、switch、bitel、adder、sound_ddd、sound_ddd_du模块,再进行试验设
计和软件仿真调试,分别实现时分秒计时、闹钟闹铃、时分秒手动
校时、时分秒清零,时间保持和整点报时等多种基本功能。
单个模块调试达到预期目标,再将整体模块进行试验设计和软件仿
真调试,已完全达到分块模式设计功能,并达到设计目标要求。
关键字:多功能数字钟、verilog、模块、调试、仿真、功能
目录
1.课程设计的目的及任务 .............................................................
错误!未定义书签。
1.1 课程设计的目
的 (3)
1.2 课程设计的任务与要
求 (4)
2.课程设计思路及其原
理 (4)
3.quartusii软件的应
用 (5)
3.1工程建立及存
盘 (5)
3.2工程项目的编
译 (5)
3.3时序仿
真 ....................................................................................................... (6)
4.分模块设计、调试、仿真与结果分
析 (7)
4.1 clk50mto1时钟分频模
块 (7)
4.2 adder加法器模
块 (7)
4.3 hexcounter16 进制计数器模
块 (7)
4.4 counter_time 计时模
块 (8)
4.5 alarm闹铃模
块 (8)
4.6 sound_ddd嘀嘀嘀闹铃声模
块 (9)
4.7 sound_ddd_du嘀嘀嘀—嘟声音模
块 (9)
4.8 alarm_time闹钟时间设定模
块 (10)
4.9 bitsel将输出解码成时分秒选择模
块 (10)
4.10 switch去抖模
块 (11)
4.11 led译码显示模
块 (11)
4.12 clock顶层模
块 (12)
5.实验总
结 ....................................................................................................... (13)
5.1调试中遇到的问题及解决的方
法 (13)
5.2实验中积累的经验 (14)
5.3心得体
会 (14)
6.参考文
献 ...................................................................................................... (14)
1.1 课程设计的目的
通过课程设计的锻炼,要求学生掌握verilog hdl语言的一般设计方法,掌握veriloghdl语言的基本运用,具备初步的独立设计能力,
提高综合运用所学的理论知识独立分析和解决问题的能力,基于实践、源于实践,实践出真知,实践检验真理,培养学生的
创新精神。
掌握现代数字逻辑电路的应用设计方法,进一步掌握电子仪器的正
确使用方法,以及掌握利用计算机进行电子设计自动化(eda)的基本方法。
1.2 课程设计的任务与要求
用verilog hdl语言设计一个多功能的数字钟,具有下述功能:
(1)计时功能。
包括时、分、秒的计时;
(2)定时与闹钟功能:能在设定的时间发出闹铃音;
(3)校时功能。
对时、分和秒能手动调整以校准时间;
(4)整点报时功能;每逢整点,产生“嘀嘀嘀嘀一嘟”四短一长的报时音。
2.课程设计思路及其原理
数字计时器要实现时分秒计时、闹钟闹铃、时分秒手动校时、时分秒清零,时间保持和整点报时等多种基本功能,所有功能都基于计时功能。
因此首先需要获得具有精确振荡时间的脉振信号,以此作为计时电路的时序基础,实验中可以使用的振荡频率源为50mhz,通过分频获得所需脉冲频率1hz。
得到1hz脉冲后,要产生计时模块,必须需要加法器来进行加法,因此需要一个全加器,此实验中设计一个八位全加器来满足要求。
清零功能是通过控制计数器清零端的电平高低来实现的。
只需使清零开关按下时各计数器的清零端均可靠接入有效电平(本实验中是低电平),而清零开关断开时各清零端均接入无效电平即可。
保持功能是通过逻辑门控制秒计数器输入端的1hz脉冲实现的。
正常情况下,开关不影响脉冲输入即秒正常计数,当按下开关后,使脉冲无法进入计数端,从而实现计时保持功能。
要进行闹钟功能,是否进行闹钟模块nowmode,当选择00表示即使模块,10闹钟模式,01手动调整模式。
当选择闹铃模块之后,是否是整点报时闹铃还是闹钟闹铃,又需要设置一个选择模块alarmout,当00模式时不开启闹铃,01进行闹铃模式,10进行整点报时模块。
整点报时是本实验中的sound_ddd_du模块(详见附录中程序清单),sound_ddd_du模块与计时模块有点类似,但整点报时模块中不要分时分秒计数,可直接利用1hz的分频计数至时位进位时的数值,开启ddd_du闹铃。
闹钟报时功能。
在计时电路走到设定的时间时闹铃报时功能会被启动,通过与ddd产生电路进行逻辑组合,使得在达到闹铃时,发出ddd。
闹铃模块和校正模块中,需要选择闹铃调时alarmode还是checkmode校时模块,因此需要利用bitsel模块进行选择。
闹钟只设定时和分,基本模块alarmode与正常计时电路里的校时校分电路相同。
本实验中为节省按键,闹钟时间调节键复用正常调时的校时校分开关,为使设定闹铃与正常计时中调节时间按键互不影响,额外用一个闹钟使能键,按下该键后进入闹钟设定界面,此时校时校分开关用于调节闹钟时间,对正常计时没有影响;恢复使能键后校分校时键用于对数字
钟进行时间调节,对设定的闹钟时间没有影响。
校分校时checkmode功能基本原理是通过逻辑门电路控制分计数器的计数脉冲,当校分校时开关断开时,计数脉冲由低位计数器提
供;当按下校分校时开通时,既可以手动触发出发式开关给进位脉冲,也可以有恒定的1hz脉冲提供恒定的进位信号,计数器在此脉
冲驱动下可快速计数。
为实现可靠调时,采用防抖动开关(由d触发器实现)克服开关接
通或断开过程中产生的一串脉冲式振动。
当全部功能实现之后,要完成数字钟的全部输出,需要一个led显
示模块。
最后,将所有程序进行调试,在clock顶层模块中可以实现全部功能。
3.quartusii软件的应用
3.1工程建立及存盘
1.打开quartusⅡ,单击“file”菜单,选择file→new project wizard,对话框如下:分别输入项目的工作路径、项目名和实体名,单击
finish。
图3.1
2.单击“file”菜单,选择new,弹出小对话框,双击“vhdl file,即
选中了文本编辑方式。
在出现的“vhdl1.vhd”文本编辑窗中键入vhdl 程序,输入完毕后,选择file→save as,即出现“save as”对话框。
选择自己建立好的存放本文件的目录,然后在文件名框中键入文件名,按“save”按钮。
3.建立工程项目,在保存vhdl文件时会弹出是否建立项目的小窗口,点击“yes”确定。
即出现建立工程项目的导航窗口,点击“next”,最
后在出现的屏幕中分别键入新项目的工作路径、项目名和实体名。
注意,原理图输入设计方法中,存盘的原理图文件名可以是任意的,但vhdl程序文本存盘的文件名必须与文件的实体名一致,输入后,
单击“finish”按钮。
3.2工程项目的编译
单击工具条上的编译符号开始编译,并随着进度不断变化屏幕,编
译成功,完成后的屏幕如图3.2所示:
【篇三:数字系统设计与verilog_hdl_王金明_第四版__eda期末知识点复习(宁波工程学院电科版)】
1)更适合用于描述规模大、功能复杂的数字系统
2)语言标准化、便于设计的复用、交流、保存和修改
3)设计与工艺的无关性,宽范围的描述能力,便于组织大规模、模
块化的设计
2、verilog模块的结构
模块声明:包括模块名字、模块输入、输出端口列表,结束关键字
为endmodule 端口定义:格式为:input: 端口名1,端口名2?端
口名n;
output: 端口名1,端口名2?端口名n;
inout: 端口名1,端口名2?端口名n;
3、标识符是用户在编程时给verilog对象起的名字,模块、端口和
实例的名字都是标识符。
标识符可以是任意一组字母、数字以及符
号“$”和“_”的组合,但标识符的第一个字符必须是字母(a-z,a-z)或者是下划线“_”,标识符最长可包含1023个字符,此外,标识符
区分大小写。
4、整数写法:+/-size位宽’base进制value数字
1、在较长的数之间可用下划线分开
2、当数字不说明位宽时,默认值为32位
3、 x或(z)在二进制中代表1位x(或z),在八进制中代表3
位,在16进制中代表4位
4、如果没有定义一个整数的位宽,其宽度为相应值中定义的位数。
5、如果定义的位宽比实际的位数长,通常在左边填0补位,但如
果最左边一位为x或z,就相应的用x或z左边补位。
6、“?”是高阻态z的另一种表示符号,在数字的表示中,字符“?”和z是完全等价的,可相互代替。
7、整数可以带符号,并且正负号应写在最左边,负数通常表示为
二进制补码的形式。
8、当位宽与进制缺省时表示的是10进制数
9、在位宽和‘之间,以及进制和数值之间允许出现空格,但’和进制
之间以及数值之间是不能出现空格的。
要求掌握整数正确的书写方式。
5、向量:宽度大于1位的变量;
标量:宽度为1位的变量。
定义2个8位reg型矢量:reg [7:0] ra, rb;
6、运算符
(1)注意:逻辑运算符,例如逻辑与、逻辑或||、逻辑非!,运算结
果是1位的。
如果操作数不止1位的话,则应将操作数作为一个整
体来对待,即如果操作数全是0,则相当于逻辑0,但只要某一位是1,则操作数就应该整体看作逻辑1。
例如:若a = 4’b0000, b = 4’b0101,则有:
a b = 0;
(2)位拼接运算符:{ }将两个或多个信号的某些位拼接起来
7、initial语句和always语句的区别:initial语句常用于仿真中的初始化,initial过程块中的语句只执行一次,不带触发条件;always 块内的语句则是不断重复执行的,always过程语句是可综合的,带有触发条件。
8、posedge:上升negedge:下降
弄清楚同步和异步的概念。
例如:如果nreset和nset是异步,时钟clock上升沿触发。
always @(posedge clk or posedge rst_n )
if (! rst_n ) q=0;
else if(nset) q=1;
else q=d;
9、阻塞赋值与非阻塞赋值的区别:非阻塞赋值在整个过程块结束时才完成赋值操作;阻塞赋值在该语句结束时就立即完成赋值操作。
在always过程块中,阻塞赋值可以理解为赋值语句是顺序执行的,而非阻塞赋值可以理解为赋值语句是并发执行的.
10、条件语句,条件语句也称分支语句。
11、顺序执行:阻塞赋值语句;
并发执行:非阻塞赋值语句。
12、用行为语句设计一个8位计数器,每次在时钟的上升沿,计数器加1,当计数器逸出时,自动从零开始重新计数。
计数器有同步复位端。
module count(count,reset,clk);
input clk,reset;
output clk,reset;
output [7:0] count;
reg count;
always @(posedge clk)
if(reset==1)
begin
count=8b0;
end
else if (count=8b11111111)
begin
count=9b0;
end
else if
begin
count=count+1;
end
end module
13奇偶校验位产生器的verilog hdl描述:
module parity(evrn_bit,odd_bit,a);
input[7:0] a; output even_bit,odd_bit;
assign even_bit=^a; //生成偶校验位
assign odd_bit=~even_bit; //生成奇校验位
endmodule;
14、课本197页:8.2 有限状态机的verilog描述
参考例8.3,例8.7,学会用有限状态机设计序列检测器。
module fsm_seq1111(x,z,clk,reset);
input x,clk,reset;
output reg z;
reg[4:0] state;
parameter s0=’d0,s1=’d1,s2=’d2,s3=’d3,s4=’d4;
always @(posedge clk)
begin if(reset) begin state=s0;z=0; end
elsecasex(state)
s0: begin if(x==0) begin state=s0;z=0;end
elsebegin state=s1;z=0;end end
s1: begin if(x==0) begin state=s0;z=0;end
elsebegin state=s2;z=0;end end
s2: begin if(x==0) begin state=s0;z=0;end
elsebegin state=s3;z=0;end end
s3: begin if(x==0) begin state=s0;z=0;end
elsebegin state=s4;z=1;end end
s4: begin if(x==0) begin state=s0;z=0;end
elsebegin state=s4;z=1;end end
default: state=s0;
endcase
end
endmodule
15、状态机设计流水灯:
module led_water(clk50m,rst,led);
input clk50m;
output[7:0] led;
input rst;
wire clk_5hz;
reg[7:0] led_r;
reg[3:0] state;
reg[23:0] count;
parameter s0=d0,s1=d1,s2=d2,s3=d3,
s4=d4,s5=d5,s6=d6,s7=d7,
s8=d8,s9=d9,s10=d10,s11=d11,
s12=d12,s13=d13,s14=d14,s15=d15;
always @(posedge clk50m)
begin
if(count==10000000)
begin count=1b0;end
else
count=count+1b1;
end
assign clk_5hz=count[23];
assign led=led_r;
always @(posedge clk_5hz)
begin
if(!rst) state=s0;
else case(state)
s0: begin led_r=8b01111111; state=s1;end s1: begin led_r=8b10111111; state=s2;end s2: begin led_r=8b11011111; state=s3;end s3: begin led_r=8b11101111; state=s4;end s4: begin led_r=8b11110111; state=s5;end s5: begin led_r=8b11111011; state=s6;end s6: begin led_r=8b11111101; state=s7;end s7: begin led_r=8b11111110; state=s8;end s8: begin led_r=8b11111100; state=s9;end s9: begin led_r=8b11111000; state=s10;end s10: begin led_r=8b11110000; state=s11;end s11: begin led_r=8b11100000; state=s12;end s12: begin led_r=8b11000000; state=s13;end s13: begin led_r=8b10000000; state=s14;end s14: begin led_r=8b00000000; state=s15;end
s15: begin led_r=8b10100101; state=s0;end
default: begin led_r=8b11111111;state=s0;end endcase
end
endmodule
16、超前进位加法器的verilog hdl描述:
module add_ahead (sum,cout,a,b,cin);
input[7:0] a,b; input cin;output[7:0] sum;
output cout;wire[7:0] g,p; wire[7:0] c,sum;
assign g[0]=a[0]b[0];
assign p[0]=a[0]|b[0];
assign c[0]=cin;
assign sum[0]=g[0]^p[0]^c[0];
assign g[1]=a[1]b[1];
assign p[1]=a[1]|b[1];
assign c[1]=g[0]|(p[0]cin);
assign sum[0]=g[0]^p[0]^c[0];
assign g[2]=a[2]b[2];
assign p[2]=a[2]|b[2];
assign c[2]=g[1]|(p[1]c[1]);
assign sum[2]=g[2]^p[2]^c[2];
assign g[3]=a[3]b[3];
assign p[3]=a[3]|b[3];
assign c[3]=g[2]|(p[2]c[2]);
assign sum[3]=g[3]^p[3]^c[3];
assign g[4]=a[4]b[4];
assign p[4]=a[4]|b[4];
assign c[4]=g[3]|(p[3]c[3]);
assign sum[4]=g[2]^p[2]^c[2];
assign g[5]=a[5]b[5];
assign p[5]=a[5]|b[5];
assign c[5]=g[4]|(p[4]c[4]);
assign sum[5]=g[5]^p[5]^c[5];
assign g[6]=a[6]b[6];
assign p[6]=a[6]|b[6];
assign c[6]=g[5]|(p[5]c[5]);
assign sum[6]=g[6]^p[6]^c[6];
assign g[7]=a[7]b[7];
assign p[7]=a[7]|b[7];
assign c[7]=g[6]|(p[6]c[6]);
assign sum[7]=g[7]^p[7]^c[7];
assign cout=g[7]|(p[7]c[7]);
endmodule
17、课本227页:9.4 奇数分频与小数分频
奇数分频的方法:用两个计数器,一个由输入时钟上升沿触发,一个由输入时钟下降沿触发,最后将两个计数器的输出相或,即可得到占空比为50%的方波波形。
小数分频的方法:1)用数字锁相环实现。
先利用锁相环电路将输入时钟倍频,然后利用分频器对新产生的高频信号进行分频得到需要的时钟频率。
2)先设计两个不同分频比的整数分频器,然后通过控制两种分频比出现的不同次数来获得所需的小数分频值,从而实现平均意义上的小数分频。
偶数次分频的方法:比如进行2n次分频,只需在计数到n-1时,波形翻转即可;或者在最后一级加一个2分频器也可实现。