实验六Verilog设计分频器计数器电路答案
verilog数字系统设计教程习题答案

verilog 数字系统设计教程习题答案第二章HDL 既是一种行为描述语言,也是一种结构描述语言。
如果按照一定的规则和风格编写代码,就可以将功能行为模块通过工具自动转化为门级互联的结构模块。
这意味着利用Verilog 语言所提供的功能,就可以构造一个模块间的清晰结构来描述复杂的大型设计,并对所需的逻辑电路进行严格的设计。
2.模块的基本结构由关键词module和endmodule构成。
3.一个复杂电路系统的完整Verilog HDL 模型是由若干个VerilogHDL模块构成的,每一个模块又可以由若干个子模块构成。
其中有些模块需要综合成具体电路,而有些模块只是与用户所设计的模块交互的现存电路或激励信号源。
利用Verilog HDL语言结构所提供的这种功能就可以构造一个模块间的清晰层次结构来描述极其复杂的大型设计,并对所作设计的逻辑电路进行严格的验证。
HDL和VHDL乍为描述硬件电路设计的语言,其共同的特点在于:能形式化地抽象表示电路的结构和行为、支持逻辑设计中层次与领域的描述、可借用高级语言的精巧结构来简化电路的描述、具有电路仿真与验证机制以保证设计的正确性、支持电路描述由高层到低层的综合转换、硬件描述与实现工艺无关(有关工艺参数可通过语言提供的属性包括进去)、便于文档管理、易于理解和设计重用。
5.不是6.将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。
7.综合工具可以把HDL变成门级网表。
这方面Synopsys工具占有较大的优势,它的Design Compile 是作为一个综合的工业标准,它还有另外一个产品叫Behavior Compiler ,可以提供更高级的综合。
另外最近美国又出了一个软件叫Ambit ,据说比Synopsys 的软件更有效,可以综合50万门的电路,速度更快。
今年初Ambit 被Cadence 公司收购,为此Cade nee放弃了它原来的综合软件Syn ergy。
数字系统设计与veriloghdl课后答案

数字系统设计与veriloghdl课后答案【篇一:数字逻辑与数字系统设计习题参考答案】>第1章习题解答1.3 (1)86(2)219(3)106.25(4)0.6875 (4)0.1011.4 (1)101111(2)1001000(3)100001l.111.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)8421bcd1.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.00110001.10(1)(104)10=(1101000)2 [1101000]补=01101000(-97)10=(-1100001)2 [-1100001]补=1001111101101000 + 10011111 0000011110000011 + 01001111 11010010[104-97]补=01101000+10011111=00000111, 104-97=(00000111)2=7 (2) (-125)10=(-1111101)2(79)10=(01001111)2[-1111101]补=10000011 [01001111]补=0100111101111000 [-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 0011010110101001+ 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。
实验六 Verilog设计分频器计数器电路答案

实验六Verilog设计分频器/计数器电路一、实验目的1、进一步掌握最基本时序电路的实现方法;2、学习分频器/计数器时序电路程序的编写方法;3、进一步学习同步和异步时序电路程序的编写方法。
二、实验内容1、用Verilog设计一个10分频的分频器,要求输入为clock(上升沿有效),reset(低电平复位),输出clockout为4个clock周期的低电平,4个clock周期的高电平),文件命名为fenpinqi10。
v.2、用Verilog设计一异步清零的十进制加法计数器,要求输入为时钟端CLK(上升沿)和异步清除端CLR(高电平复位),输出为进位端C和4位计数输出端Q,文件命名为coute r10.v。
3、用Verilog设计8位同步二进制加减法计数器,输入为时钟端CLK(上升沿有效)和异步清除端CLR(低电平有效),加减控制端UPDOWN,当UPDOWN为1时执行加法计数,为0时执行减法计数;输出为进位端C和8位计数输出端Q,文件命名为couter8.v。
4、用VERILOG设计一可变模数计数器,设计要求:令输入信号M1和M0控制计数模,当M1M0=00时为模18加法计数器;M1M0=01时为模4加法计数器;当M1M0=10时为模12加法计数器;M1M0=11时为模6加法计数器,输入clk上升沿有效,文件命名为mcout5。
v。
5、VerilogHDL设计有时钟时能的两位十进制计数器,有时钟使能的两位十进制计数器的元件符号如图所示,CLK是时钟输入端,上升沿有效;ENA是时钟使能控制输入端,高电平有效,当ENA=1时,时钟CLK才能输入;CLR是复位输入端,高电平有效,异步清零;Q[3.。
0]是计数器低4位状态输出端,Q[7..0]是高4位状态输出端;COUT是进位输出端.三、实验步骤实验一:分频器1、建立工程2、创建Verilog HDL文件3、输入10分频器程序代码并保存4、进行综合编译5、新建波形文件6、导入引脚7、设置信号源并保存8、生成网表9、功能仿真10、仿真结果分析由仿真结果可以看出clockout输出5个clock周期的低电平和5个clock的高电平达到10分频的效果,设计正确。
Verilog设计分频器(面试必看)

Verilog设计分频器(⾯试必看)分频器是指使输出信号频率为输⼊信号频率整数分之⼀的电⼦电路。
在许多电⼦设备中如电⼦钟、频率合成器等,需要各种不同频率的信号协同⼯作,常⽤的⽅法是以稳定度⾼的晶体振荡器为主振源,通过变换得到所需要的各种频率成分,分频器是⼀种主要变换⼿段。
早期的分频器多为正弦分频器,随着数字集成电路的发展,脉冲分频器(⼜称数字分频器)逐渐取代了正弦分频器。
下⾯以Verilog HDL 语⾔为基础介绍占空⽐为50%的分频器。
1、偶分频 偶分频电路指的是分频系数为 2、4、6、8 ... 等偶数整数的分频电路,我们可以直接进⾏分频。
例如下⾯ divider.v 中,对输⼊时钟进⾏6分频,即假设clk 为 50MHz ,分频后的时钟频率为 (50/6) MHz。
程序如下:设计代码:1//rtl2module divider(3 clk,4 rst_n,5 clk_div6 );7input clk;8input rst_n;9output clk_div;10reg clk_div;1112parameter NUM_DIV = 6;13reg [3:0] cnt;1415always @(posedge clk or negedge rst_n)16if(!rst_n) begin17 cnt <= 4'd0;18 clk_div <= 1'b0;19end20else if(cnt < NUM_DIV / 2 - 1) begin21 cnt <= cnt + 1'b1;22 clk_div <= clk_div;23end24else begin25 cnt <= 4'd0;26 clk_div <= ~clk_div;27end28endmoduleView Code仿真程序:1//tb2module divider_tb();3reg clk;4reg rst_n;5wire clk_div;6parameter DELY=100;7 divider U_divider(8 .clk (clk ),9 .rst_n (rst_n ),10 .clk_div(clk_div)11 );12always #(DELY/2) clk=~clk;//产⽣时钟波形13initial begin14 $fsdbDumpfile("divider_even.fsdb");15 $fsdbDumpvars(0,U_divider);16end17initial begin18 clk=0;rst_n=0;19 #DELY rst_n=1;20 #((DELY*20)) $finish;21end22endmoduleView Code可以看到,clk的上升沿,采样到cnt=2的时候,就翻转,采样到0和1的时候,保持。
最新Verilog练习参考答案资料

、问答题、下面哪些是正确的用户定义的标识符?对错误的标识符,指出其错误的原 、读程序,回答相关问题: 1、module a1(a,b,sel,out);in put [3:0] a,b ; in put [1:0] sel ; output [3:0] out ; always @(a or b or sel) case (sel) 2 '22若输入1) a=s ' b0111 b=4 'b0100 sel=2 'b00 问输出out= 1011 ; 2) a=s ' b1011 b=4 'b0100 sel=2 'b01 问输出out= 1011 ; 3) a=s ' b1011 b=4 'b0100 sel=2 'b10 问输出out= 0100 ; 4) a=s ' b1011 b=4 'b0100 sel=2 'b11 问输出out=.0111 .100ns/10ns timescalemodule gete2( a,b,out); in put a,b ;2endcase ;endmodule1) 2) 3) 4) Help 2nd_item casex in teger 5) _na36me 6) 7) 8) 9)$time module‘ xy_a7tyr10) myex4 mp 、定义如下的变量和常量 32位的寄存器变量buf1 整数age 容量为256单元、字长为 VX ,以数字2为首X , casex 是verilog 的关键字 X , integer 是 verilog 的关键字 V XX , modul 是 everilog 的关键字 X,不允许出现字符‘ X,以数字7为首 X,含有空格符 1) 2) 3) reg[31:0] buf1 ; in teger age ;16位的存储器memoryreg[15:0] memory[255:0];长度为32的向量buf2 值为50的参数COUNT 4) 5) 、写出下列表达式的值1) 3) 5) 7) reg[31:0] buf2 ; parameter COUNT=50 ; (20==5) ? 8: (26>3) ? 3 : 94' b0110&4' b1100 0100 4' b0011|4' b1100 1111 9%6 3 8 ) 4' 3 2 ) 9/6 1 4 ) 4 ' b0110&&4 b1100 1 6 ) 4' b0011||4 ' b1100 1 b0111>>2 0001 9 ) 4' b0111<<2 1100 b00 : out=a+b ; b01 : out=a ; b10 : out=b b11 : out=a-b ; 2、'问:仿真时,当输入a 、b 从11变到01时,贝U 输出out 如何变化?相对a 的 变化,out 的变化延时多少时间? 延时1540ns 3、module a2( clk,clr,set,a, z);input a,clk,clr ; output reg z ;reg[3:0] q ;always @(posedge clk or posedge clr)beg in if (clr) q<=4 ' b0 ;else if (set) qv=4'hf ; else beg in q<<1; q[0]<=a; endendassig n z=q[3]; en dmodule试判断该逻辑电路的逻辑功能;若输入信号set 、clr 、clk 、a 的波形如下, 试画出输出 z 的波形。
eda技术实用教程-veriloghdl答案

eda技术实用教程-veriloghdl答案【篇一:eda技术与vhdl程序开发基础教程课后答案】eda的英文全称是electronic design automation2.eda系统设计自动化eda阶段三个发展阶段3. eda技术的应用可概括为4.目前比较流行的主流厂家的eda软件有、5.常用的设计输入方式有原理图输入、文本输入、状态机输入6.常用的硬件描述语言有7.逻辑综合后生成的网表文件为 edif8.布局布线主要完成9.10.常用的第三方eda工具软件有synplify/synplify pro、leonardo spectrum1.8.2选择1.eda技术发展历程的正确描述为(a)a cad-cae-edab eda-cad-caec eda-cae-cadd cae-cad-eda2.altera的第四代eda集成开发环境为(c)a modelsimb mux+plus iic quartus iid ise3.下列eda工具中,支持状态图输入方式的是(b)a quartus iib isec ispdesignexpertd syplify pro4.下列几种仿真中考虑了物理模型参数的仿真是(a)a 时序仿真b 功能仿真c 行为仿真d 逻辑仿真5.下列描述eda工程设计流程正确的是(c)a输入-综合-布线-下载-仿真b布线-仿真-下载-输入-综合c输入-综合-布线-仿真-下载d输入-仿真-综合-布线-下载6.下列编程语言中不属于硬件描述语言的是(d)a vhdlb verilogc abeld php1.8.3问答1.结合本章学习的知识,简述什么是eda技术?谈谈自己对eda技术的认识?答:eda(electronic design automation)工程是现代电子信息工程领域中一门发展迅速的新技术。
2.简要介绍eda技术的发展历程?答:现代eda技术是20世纪90年代初从计算机辅助设计、辅助制造和辅助测试等工程概念发展而来的。
实验六 基于VHDL语言的分频器设计与实现

实验六基于VHDL语言的分频器设计与实现报告一、实验目的1、进一步掌握VHDL语言的基本结构及设计的输入方法。
2、掌握VHDL基本逻辑电路的综合设计应用。
二、实验原理在数字电路系统中,分频电路应用得十分广泛。
例如,工程人员常常使用分频电路来得到数字通信中的帧头信号、选通信号以及中断信号等。
因此,分频电路在数字电路系统的设计中也应该作为重要的基本电路来掌握,从而给今后的一些设计带来方便。
三、实验内容1、设计并实现一个6分频的分频电路,要求其输出信号的占空比为50%。
请分析分频电路设计原理并编写VHDL语言程序,利用Max+PlusII开发软件对其进行编译和仿真。
6分频电路实现程序代码如下:2、在实际数字电路设计过程中,往往需要得到占空比不是1:1的分频时钟,方法是:首先描述一个计数器电路,然后根据计数器电路的并行输出信号来决定输出时钟的高低电平。
请设计、编写VHDL 语言程序实现分频后时钟信号的占空比为1:15的16分频电路,并利用Max+PlusII开发软件对其进行编译和仿真。
四、实验设计1.程序代码:图library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity clk_div6 isport(clk:in std_logic;clk_out:out std_logic);end clk_div6;architecture rtl of clk_div6 issignal clk_temp:std_logic;beginprocess(clk)variable counter:integer range 0 to 15;constant md:integer:=2;beginif clk'event and clk='1'thenif counter=md thencounter:=0;clk_temp<=not clk_temp;elsecounter:=counter+1;end if;end if;end process;clk_out<=clk_temp;end rtl;2.仿真结果:五、实验结果分析本实验利用VHDL语言设计分频电路,目的在于进一步掌握VHDL语言的基本结构及设计的输入方法,掌握VHDL基本逻辑电路的综合设计应用。
用Verilog+HDL语言设计分频器和32位计数器

i<i+1l
end
cs)∥有片选信号
end endrnodule
begin if(addr)
aceuh<2data}
该模块已通过软件仿真,符合设计要求。并已将程序下载到FPGA芯片,在电路板上与 系统进行联调,已证明设计达到预期功能,正式投入使用。
参 考 文 献
1夏宇闻.复杂数字电路与系统的VerilogHDL设计技术.北京t北京航空航天大学出版杜,1999.1—86 2阎石鼓字电子技术基础.北京:高等教育出版社.1 997.224--295 3束万焘·罗 车,吴顺军.CPI,D技术及其盥用西安:西安电子科技大学出版社,1999.30】oo
end end
output
elkl.c}//输出时钟和计数进位信号
j
wirte[15
reg
பைடு நூலகம்
O]data—reg·dataI
c,clkl{
if(i>=119) 计数值的高16位数和低
begin
∥对输人时钟进行J20分频
reg[1 5:O]aceub.aecul;
1
6位数
j<=0; clkl<=~clkl;
第23卷第6期 2002年1 1月
微计算机应用
MICROCOMPUTER APPLICATIONS
Vol
23.N。.6
Nov-,2002
用Ver|log
HDL语言设计分频器和32位计数器
谈艳云 罗志强
100083)
仍局
(北京航空航天大学电子工程东北京
擅要t介绍一种软件实现分频器和32位计数器的设计思路.即采用大规模可编程逻辑芯片.
+PLUS
II仿真正是一种实用的EDA软件,它具有原理图输入和文本输入(采用硬件描述语
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六V e r i l o g设计分频器/计数器电路
一、实验目的
1、进一步掌握最基本时序电路的实现方法;
2、学习分频器/计数器时序电路程序的编写方法;
3、进一步学习同步和异步时序电路程序的编写方法。
二、实验内容
1、用Verilog设计一个10分频的分频器,要求输入为clock(上升沿有效),reset(低电平复位),输出clockout为4个clock周期的低电平,4个clock 周期的高电平),文件命名为。
2、用Verilog设计一异步清零的十进制加法计数器,要求输入为时钟端CLK (上升沿)和异步清除端CLR(高电平复位),输出为进位端C和4位计数输出端Q,文件命名为。
3、用Verilog设计8位同步二进制加减法计数器,输入为时钟端CLK(上升沿有效)和异步清除端CLR(低电平有效),加减控制端UPDOWN,当UPDOWN 为1时执行加法计数,为0时执行减法计数;输出为进位端C和8位计数输出端Q,文件命名为。
4、用VERILOG设计一可变模数计数器,设计要求:令输入信号M1和M0控制计数模,当M1M0=00时为模18加法计数器;M1M0=01时为模4加法计数器;当M1M0=10时为模12加法计数器;M1M0=11时为模6加法计数器,输入clk 上升沿有效,文件命名为。
5、VerilogHDL设计有时钟时能的两位十进制计数器,有时钟使能的两位十进制计数器的元件符号如图所示,CLK是时钟输入端,上升沿有效;ENA是
时钟使能控制输入端,高电平有效,当ENA=1时,时钟CLK才能输入;CLR 是复位输入端,高电平有效,异步清零;Q[3..0]是计数器低4位状态输出端,Q[7..0]是高4位状态输出端;COUT是进位输出端。
三、实验步骤
实验一:分频器
1、建立工程
2、创建Verilog HDL文件
3、输入10分频器程序代码并保存
4、进行综合编译
5、新建波形文件
6、导入引脚
7、设置信号源并保存
8、生成网表
9、功能仿真
10、仿真结果分析
由仿真结果可以看出clockout输出5个clock周期的低电平和5个clock 的高电平达到10分频的效果,设计正确。
实验二:十进制加法计数器(异步清零)
1、建立工程
2、创建Verilog HDL文件
3、输入加法计数器代码并保存
4、进行综合编译
5、新建波形文件
6、导入引脚
7、设置信号源并保存
8、生成网表
9、功能仿真
10、仿真结果分析
由仿真结果可以看出异步清除端CLR高电平时,输出Q清零,CLR低电平则Q进行1到9的计数,超过9进位端C为1 ,Q从0 开始重新计数如此循环。
因此设计正确。
实验三:8位同步二进制加减计数器
1、建立工程
2、创建Verilog HDL文件
3、输入同步8位加减法计数器程序代码并保存
4、进行综合编译
5、新建波形文件
6、导入引脚
7、设置信号源并保存
8、生成网表
9、功能仿真
10、仿真结果分析
由仿真波形图可以看出当时钟clock的上升沿到来时,clr为低电平时清零,实现同步复位。
当updown为低电平时,计数器做减法操作;当updown为低电平时,计数器做加法操作。
所以设计正确。
实验四:可变模数计数器
1、建立工程
2、创建Verilog HDL文件
3、输入可变模数计数器程序代码并保存
module mcout5_ljj (M1,M0,CLK,out,c,CLR);
input M1,M0,CLK,CLR;
output c;
output[5:0]out;
reg c;
reg[5:0]M,N;
reg[5:0]out;
always@(posedge CLK or posedge CLR)
begin
if (CLR)
begin
out<=0;N<=0;
end
else
begin
N<=M;
case({M1,M0})
'b00:
M<=18;
'b01:
M<=4;
M<=12;
'b11:
M<=6;
endcase
if(N==M)
begin
if(out==(M-1))
begin
out<=0;c<=~c;
end
else
begin
out<=out+1;
end
end
else
begin
out<=0;c<=0;
end
end
end
endmodule
4、进行综合编译
5、新建波形文件
6、导入引脚
7、功能仿真
11、仿真结果分析
当M1M0=00时波形图,此时为模18的加法计数器
当M1M0=01时波形图,此时为模4加法计数器
当M1M0=10时波形图,此时为模12加法计数器
当M1M0=01时波形图,此时为模6加法计数器
实验五:2位十进制计数器
1、建立工程
2、创建Verilog HDL文件
3、输入2位十进制计数器程序代码并保存
module counter8 (clk,clr,ena,cout,ql,qh);
input clk,clr,ena;
output cout;
output[3:0] ql,qh;
reg[3:0]qh,ql;
reg cout;
always @(posedge clk or posedge clr)
begin
if(clr)
qh<=0;
ql<=0;
cout<=0;
end
else if(ena)
begin
ql<=ql+1;
if(ql=='b1010)
begin
ql<=0;qh<=qh+1;
if(qh=='b1010)
begin
qh<=0;
cout<=~cout;
end
end
end
end
endmodule
4、进行综合编译
5、新建波形文件
6、导入引脚
7、设置信号源并保存
8、生成网表
9、功能仿真和结果分析
Q[3..0]是进位输出端,Q[7..3]是高四位的状态输出端,结果正确。
10、生成俩位十进制计数器元件。