数字系统设计与veriloghdl课后答案

数字系统设计与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)

?(ac?bc)(b?ac?ac)?abc?ac?bc?abc?ac?bc

??

(8)f?(a?b)?(b?c)?ab?ab?bc?bc

?ab?bc?ac 或=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分频器也可实现。

相关文档
最新文档