Verilog课件 第十二讲 多时钟域数字系统设计例
用Verilog语言编写的多功能数字钟

《数字电子技术课程设计》报告专业班级:姓名:学号:设计日期:一.设计题目多功能数字钟电路设计二.设计任务及要求多功能数字钟应该具有的功能有:显示时—分—秒、整点报时、小时和分钟可调等基本功能。
整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,小时的范围为0~23时。
在实验中为了显示的方便,由于分钟和秒钟显示的范围都是从0~59,所以可以用一个3位的二进制码显示十位,用一个四位的二进制码(BCD 码)显示个位,对于小时因为他的范围是从0~23,所以可以用一个2位的二进制码显示十位,用一个4位的二进制码(BCD码)显示个位。
实验中由于七段码管是扫描的方式显示,所以虽然时钟需要的是1Hz 时钟信号,但是扫描需要一个比较高频率的信号,因此为了得到准确的1Hz 信号,必须对输入的系统时钟50Mhz进行分频。
对于整点报时功能,本实验设计的是当进行正点的倒计时5秒时,让LED来闪烁进行整点报时的提示。
调整时间的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时;S2调整分钟,每按下一次,分钟增加一分钟。
另外用S8按键作为系统时钟复位,复位后全部显示00—00—00。
管脚分配如下表:三.基于Verilog HDL语言的电路设计、仿真与综合(一)顶层模块本程序采用结构化设计方法,将其分为彼此独立又有一定联系的三个模块,如图1所示:LocationPIN_R16Option Value VCC S1INPUT Location PIN_P14Option Value VCC S2INPUT Location PIN_J3Option Value VCCCPINPUT Location PIN_M4Location PIN_F3Location PIN_F4Option Value SEL[2..0]OUTPUT Location PIN_L14Option Value LEDOUTPUTLocation PIN_N4Location PIN_G4Location PIN_H4Location PIN_L5Location PIN_L4Location PIN_K4Location PIN_K5Option Value LEDAG[6..0]OUTPUTCP CPoutf enpininst1CPoutS1S2RETHour[5..0]Minute[5..0]Second[5..0]LEDkongzhiqi inst2VCCRETINPUT CPout Hour[5..0]Minute[5..0]Second[5..0]SEL[2..0]LEDAG[6..0]xianshi inst图1:顶层结构框图(二)子模块 1.分频器分频器的作用是对50Mhz 的系统时钟信号进行分频,得到频率为1000hz 的信号,作为显示器的输入信号。
VerilogHDL语言数字时钟

VerilogHDL语言数字时钟EDA与数字系统设计报告实验名称:带有设臵时间功能和闹钟功能的数字钟一、设计内容和要求实验要求使用Verilog HDL进行多功能时钟的设计具体要求如下:1.能将基本的小时、分钟、及秒钟显示在数码管上2.能利用拨码开关进行时间的校正3.具有整点报时和闹钟的功能二、设计原理1.工作原理多功能数字钟系统共包括三个模块,即分频器模块、计数器模块和显示译码模块。
多功能数字钟的功能可以从整体上分为三类,分别是正常计时、时钟校对和闹钟设臵,所以考虑在系统中设臵一个模式控制信号mode。
模式控制信号对应一个按键,每按一次按键相当于工作模式进行一次变换,多次按下则数字钟将在正常计时、时间校对和闹钟设臵三个工作模式下依次循环。
在设计中,时钟校对和闹钟设臵工作模式都需要对时间进行设臵,通常是对小时和分钟进行设臵,所以需要在系统中设臵一个时间设臵信号set,对应一个按键,每按一次相当于在小时设臵和分钟设臵之间进行转换。
时间设臵时,分钟和小时计时单位之间互相独立,不存在进位关系。
同时设臵一个时间调整信号accum,每按一次与accum对应的按键,相当于对需要调整的分钟或小时的数字进行加1操作。
数字钟的计时输出信号时必不可少的,用hour,min和sec信号分别表示需要显示的小时、分钟和秒钟的计时结果,上述计时结果将通过译码显示模块进行译码后,连接到外部的七段数码显示器。
在带有闹钟设臵功能的数字钟中,闹钟输出信号也是必不可少的,到达到闹钟设臵的时间后,要向外部扬声器发送一个闹铃信号,设臵alert。
另外,我们还提供了闹钟铃声信号voice,当voice为0的时候,闹钟处于静音状态下,即使时间达到闹钟设定的时间也不会发声,当voice为1的时候,可以正常闹铃,voice信号对应一个拨码开关。
本设计中的小时、分钟和秒钟的计时结果采用BCD码表示方法。
采用这种表示方法便于对数结果的高位和低位分别进行译码。
用Verilog语言编写的多功能数字钟

这次的闹钟电路设计和多功能数字钟有一些相似的地方,不同在于整体构思和细
节上要求的差异。
构思根据要求采用的是状态机设计方法。从一个状态进入另一个状态最适合这个
设计了。细节上和数字钟也有很大的差异。中间的控制逻辑有时候需要反馈。前
后都是有联系的,并不是独立存在的。
本次设计基本上完成的所以的要求,但是由于时间紧急,一些细节并不是很完美,
分频器的作用是对 50Mhz 的系统时钟信号进行分频,得到频率为 1hz 的信号,
作为时钟的输入信号。
2
2.控制器和计数器 控制器的作用是,调整小时和分钟的值,并能实现清零功能。计数器的
作用是实现分钟和秒钟满 60 进 1,小时则由 23 跳到 00。当到达 59 分 55 秒的时 候,LED 灯会闪烁来进行报时。
end 2:
begin state<=2; s=1;
end 3:
begin s=0; if(k1==0) //时调整
7
begin
if(nz_h_l==3)
begin
nz_h_l=0;
if(nz_h_h==2)nz_h_h=0;
else nz_h_h=nz_h_h+1;
end
else nz_h_l=nz_h_l+1;
end
else if(k3==0) finish=1;
//设置完成
else if(k4==0) spker_en=1; //停止声响
end
8
4: begin s=0; if(k4==0) begin on_off<=!on_off;state=0;end end
endcase end end endmodule 3.显示器 显示器的作用是将时:分的值在数码管上依次显示出来。从分频器输出的 1Khz 的信号作为数码管的扫描信号。SEL 表示 6 个数码管选择位,它的取值表示八个 数码管,从左至右依次是 111~000。seg 表示七段数码管,它的取值决定特定位 数上显示的数字。
用Verilog语言编写的多功能数字钟

《数字电子技术课程设计》报告专业班级:姓名:学号:设计日期:一.设计题目多功能数字钟电路设计二.设计任务及要求多功能数字钟应该具有的功能有:显示时—分—秒、整点报时、小时和分钟可调等基本功能。
整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,小时的范围为0~23时。
在实验中为了显示的方便,由于分钟和秒钟显示的范围都是从0~59,所以可以用一个3位的二进制码显示十位,用一个四位的二进制码(BCD 码)显示个位,对于小时因为他的范围是从0~23,所以可以用一个2位的二进制码显示十位,用一个4位的二进制码(BCD码)显示个位。
实验中由于七段码管是扫描的方式显示,所以虽然时钟需要的是1Hz 时钟信号,但是扫描需要一个比较高频率的信号,因此为了得到准确的1Hz 信号,必须对输入的系统时钟50Mhz进行分频。
对于整点报时功能,本实验设计的是当进行正点的倒计时5秒时,让LED来闪烁进行整点报时的提示。
调整时间的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时;S2调整分钟,每按下一次,分钟增加一分钟。
另外用S8按键作为系统时钟复位,复位后全部显示00—00—00。
管脚分配如下表:三.基于Verilog HDL语言的电路设计、仿真与综合(一)顶层模块本程序采用结构化设计方法,将其分为彼此独立又有一定联系的三个模块,如图1所示:LocationPIN_R16Option Value VCC S1INPUT Location PIN_P14Option Value VCC S2INPUT Location PIN_J3Option Value VCCCPINPUT Location PIN_M4Location PIN_F3Location PIN_F4Option Value SEL[2..0]OUTPUT Location PIN_L14Option Value LEDOUTPUTLocation PIN_N4Location PIN_G4Location PIN_H4Location PIN_L5Location PIN_L4Location PIN_K4Location PIN_K5Option Value LEDAG[6..0]OUTPUTCP CPoutf enpininst1CPoutS1S2RETHour[5..0]Minute[5..0]Second[5..0]LEDkongzhiqi inst2VCCRETINPUT CPout Hour[5..0]Minute[5..0]Second[5..0]SEL[2..0]LEDAG[6..0]xianshi inst图1:顶层结构框图(二)子模块 1.分频器分频器的作用是对50Mhz 的系统时钟信号进行分频,得到频率为1000hz 的信号,作为显示器的输入信号。
Lecture 12 HDL语法-Verilog介绍

简单的Verilog程序 module trist1(out,in,enable); 三态门 output out; /*输出信号*/ 模块trist1 调用 input in, enable; //输入信号 模 块 mytri 的 实 mytri 例元件tri_inst; tri_inst(out,in,enable); 通过这种结构性 endmodule 模块构造可构成
同一电路的多种描述方法
• 二选一的选择器
门级(结构化)描述
module muxtwo(out,a,b,sl); input a, b, sl; output out; wire nsl, sela,selb; not #1 u1(nsl,sl); and #1 u2(sela,a,nsl); and #1 u3(selb,b,sl); or #1 u4(out, sela, selb); endmodule // #1是仿真延迟
RTL级行为描述
module muxtwo(out,a,b,sl); input a, b, sl; output out; reg out; always @(sl or a or b) if(!sl) out=a; else out=b; endmodule
布尔代数级行为描述
module muxtwo(out,a,b,sl); input a, b, sl; output out; assign out = sel?b:a; endmodule
同一电路的多种描述方法
• 二选一的选择器(综合)
混合描述
• 混合设计方式的1位全加器实例
module FA_Mix (A, B, Cin, Sum, Cout); input A, B, Cin; output Sum, Cout; reg Cout; reg T1, T2, T3; wire S1; xor X1(S1, A, B); // 门实例语句。 always @ ( A or B or Cin ) // always 语句。 begin T1 = A & Cin; T2 = B & Cin; T3 = A & B; Cout = (T1 | T2) | T3; end assign Sum = S1 ^ Cin; // 连续赋值 语句。 endmodule
verilog数字系统设计教程PPT课件

• 复杂数字系统的构成; • 基本电路和 Verilog 的对应关系; • 同步有限状态机在电路中的作用; • 时钟树与自动综合技术
数字逻辑电路的构成
- 组合逻辑:输出只是输入逻辑电平的函
数(有延时),与电路的原始状态无关。
• 时序逻辑:输出不只是输入的逻辑电
平的函数,还与电路所处的状态有关。
8 ‘ d 31
8‘d
t
out[15:0]
202
16 ‘ d
16‘ d
t
Sn 开
93
606
t 关
全局时钟网和平衡树结构
触发器1
全局时钟网络 触发器 图1 全局时钟网示意图
缓冲器
触发器n
图2 平衡树结构示意图
避免冒险和竞争
• 由于组合逻辑和布线的延迟引起
a
c
b
a
b
t
c
t
clock
避免冒险和竞争与流水线
t
t
带寄存器的八位数据通路控制器的波形
ControlSwitch
in[7]
out[7]
CLOCK
out[7]
D Q[7]
ControlSwitch
in[0]
out[0]
CLOCK
out[0]
D Q[0]
带寄存器的八位数据通路控制器的Verilog描述
`define ON 1 ‘b 1 `define OFF 1 ‘b 0 wire ControlSwitch; wire clock wire [7:0] out, in;
ControlSwitch in[7]
out[7]
…... …...
in[0]
多功能时钟设计verilog

可编程逻辑器件及其应用设计报告姓名:wangkeqin院系:电信学部学号:**********日期:2012-04-09多功能数字钟设计一、设计内容及要求➢用Verilog HDL设计一个多功能数字钟➢基本功能描述:1.时钟功能:包括时、分、秒的显示;2.定时与闹钟功能:能在设定的时间发出闹铃音;3.校时功能:能非常方便地对小时、分钟和秒进行手动调整以校准时间;4.整点报时功能:每逢整点,产生“嘀嘀嘀嘀--嘟”,四短一长的报时音。
二、仿真环境说明用Verilog在Altera公司的Quartus2软件环境下编写RTL代码,并进行综合,行为仿真。
时序仿真采用Mentor公司旗下的ModelsimSE-6.1f软件。
Modelsim 软件是业界最著名的波形仿真软件,仿真效果比Quartus2下编写波形文件仿真效果要好很多,而且仿真相当简单,只不过要编写测试向量(testbench),有点麻烦。
三、系统框图与说明Figure1系统框图1.数字钟电路系统由主体电路和扩展电路两大部分所组成。
2. 秒计数器计到59后,下一秒到来时,秒计时器满60,接着清零后向分计数器进位;同样分计数器计满60后向小时计数器进位;小时计数器按照“24进制”规律计数,每当小时计到23小时时,当分计数和秒计数分别59,59时,即到23小时59分,59秒时候,时分秒全部清零,从新开始计数。
3. 计数器的输出经译码器送显示器,显示器用6个数码管表示,每两个数码管分别表示小时,分钟,秒钟。
每个数码管用BCD码表示。
四、设计步骤(一)列写多功能数字钟设计结构图(二)在QuartusП软件下编写Verilog代码(三)在QuartusП环境下进行综合Figure2综合结果从Fig.2可以看出,该设计采用Altera公司CycloneП系列下的EP2C35F672C8芯片。
从图中可以看出,采用了162个逻辑单元,其中组合逻辑147个,总共的寄存器数为102个。
VerilogHDL数字系统设计技巧精品PPT课件

output o_clk; input i_clk; input rst_n; parameter N = N_even; // 设置偶数倍分频 parameter M = ?; // M="N/2-1" // bit_of_N: N_even的二进制位宽 reg [(bit_of_N - 1):0] cnt; // 计数器单元 reg o_clk;
cnt <= cnt + 1'b1; end end
恰恰分频:任意整数和小数分频的Verilog实现
// 生成上升沿时钟 // 0~(N/2-1) ↑ -> 1; (N/2)~(N-1) ↑ -> 0 always @ (posedge i_clk, negedge rst_n) begin
if (!rst_n) o_clk <= 0;
偶数分频器的实现非常简单,通过计数器计数 就完全可以实现。 如进行N倍偶数分频,就可以通过由待分频的 时钟触发计数器计数。 当计数器从0计数到N/2-1时,输出时钟进行翻 转,并给计数器一个复位信号,以使下一个时 钟从零开始计数。 以此循环,就可以实现任意的偶数分频。
恰恰分频:任意整数和小数分频的Verilog实现
恰恰分频:任意整数和小数分频的Verilog实现
always@(negedge clk or negedge rst_n) begin if(!rst_n) begin cnt2<=0; end else if(cnt2==2'b10) begin cnt2<=0; end else begin cnt2<=cnt2+1; end end
verilog数字系统设计教程

verilog数字系统设计教程Verilog数字系统设计教程作者:XXX引言:数字系统设计是现代电子工程中非常重要的一部分。
Verilog作为一种硬件描述语言,提供了一种方便且专业的方法来设计和描述数字系统。
本教程旨在为初学者提供关于Verilog数字系统设计的详细介绍和指导。
1. Verilog简介Verilog作为一种硬件描述语言,用于描述数字系统的功能、结构和时序行为。
它类似于C语言,但更专注于硬件级别。
Verilog可以用于设计各种数字系统,例如处理器、嵌入式系统、通信设备等。
2. Verilog基本语法2.1 模块定义Verilog的基本单位是模块。
模块是数字系统的基本组成部分,可以看作是一个独立的功能单元。
模块可以包含输入、输出、内部信号以及其它子模块等。
2.2 信号声明在Verilog中,可以声明各种类型的信号,包括输入信号、输出信号和内部信号等。
信号声明定义了信号的类型、宽度和方向。
3. Verilog建模3.1 组合逻辑建模组合逻辑是数字系统中最基本的部分。
Verilog提供了各种组合逻辑建模的方法,包括逻辑运算、选择结构和多路复用器等。
3.2 时序逻辑建模时序逻辑是数字系统中需要考虑时序关系的部分。
Verilog提供了时序逻辑建模的方法,包括触发器、计数器和时序控制等。
4. Verilog仿真4.1 仿真器介绍仿真器是用于验证数字系统设计的工具。
Verilog可以与各种仿真器配合使用,用于验证设计的正确性和性能。
4.2 仿真流程仿真流程包括编写测试平台和测试用例、编译和仿真等步骤。
本节将介绍基本的仿真流程和相关技巧。
5. Verilog综合5.1 综合概述综合是将Verilog代码转换为逻辑门级描述的过程。
综合器通过将Verilog代码映射到实际的硬件库中,生成能够实现指定功能的逻辑电路。
5.2 综合流程综合流程包括综合前的优化和综合本身两个阶段。
本节将介绍综合的基本流程和主要考虑因素。
数学Verilog数字系统设计PPT课件

• 4’b x1 = 4’b xx_x1
• MS bit = 1 zero extension
• 4’b 1x = 4’b 00_1x
第17页/共57页
数字 (iii)
• 如果 size(位宽)没标出,默认值是32位,每个字母用8位
ASII码值表示
• 如果 radix(进制)没标出,默认为十进制
第7页/共57页
Example: Half Adder
A S
B C
A
S
Half
B
Adder C
module half_adder(S, C, A, B); output S, C; input A, B;
wire S, C, A, B;
assign S = A ^ B; assign C = A & B;
• Case sensitivity
• myid Myid
第13页/共57页
注释行
与C语言完全一致
• // The rest of the line is a comment
• /*
Multiple line comment */
• /*
Nesting /* comments */ do
第14页/共57页
1
2
3
E.g. Full Adder
Half Adder Half Adder
第3页/共57页
Module
in1 my_module in2
f
inN
out1 module my_module(out1, .., inN); output out1, .., outM;
out2 input in1, .., inN;
Verilogppt课件-第十二讲-多时钟域数字系统设计例

FIFO的地址指针分析
v 在复位时,读写地址指针都指向地址0。FIFO空指示 rempty=1,指示FIFO为空。
v 读地址指针指向读出数据的存储单元,即输出数据rdata 值为该单元值。
v 写地址指针指向将写入数据的存储单元,即输入数据 wdata在wclk上升沿写入该单元。
v 在复位后,写指针先增加,即先写入后读出,正常工作时 写地址总是超前于读地址。
总线数据的FIFO同步
v 用握手同步方式,可以同步握手信号,但不能同步高速总线数据。 总线数据通过保持寄存器传递,它在接收电路采样前一直保持稳定。 注意,如果传输电路向接收电路传递数据太快,如达到时钟速率, 则采用握手的总线同步失效。
v 解决办法是使用 FIFO。一般使用 FIFO 的目的是实现速度匹配,在 FIFO 较快的端口处理猝发的数据传输,而较慢的端口则维持恒定的 数据流。虽然访问方式和速度不同,但进出 FIFO 的平均数据速率 必须是相同的,否则 FIFO 就会出现上溢(overflow)或下溢 (underflow)问题。
v wclk和rclk是不同源时钟,属于2个时钟域。 v 为复位可靠,需分别设复位信号wrst_n和rrst_n。
v 在FIFO的空满状态判别中,需用到2个时钟域的地址信号,涉及 跨时钟域信号可靠传输问题。
v 若读写地址使用二进制编码,在跨时钟域传输时,会产生多比特 同时变化问题。例7->8的二进制码变化为0111->1000,同时有 4个比特变化。
第十二讲 多时钟域数字系统设计
v多时钟域设计概念 v握手协议 vFIFO (先入先出队列)概念 v FIFO的地址指针分析 v同步FIFO设计 v异步FIFO设计 v实验要求
多时钟域设计概念
verilog语法PPT教学课件

2020/12/10
13
Verilog中reg与wire的不同点
➢ 用寄存器 (reg)类型变量生成组合逻辑举例:
module rw1( a, b, out1, out2 ) ;
input a, b;
output out1, out2;
a
BUFF out2
reg out1;
wire out2;
assign out2 = a ;
2020/12/10
12
Verilog模块中的信号
➢ 只有两种主要的信号类型: - 寄存器类型: reg
在always 块中被赋值的信号,往往代表
触发器,但不一定是触发器。 - 连线(网络)类型: wire
用 assign 关键词指定的组合逻辑的信号 或连线
➢ 寄存器 ( reg )类型不一定是触发器。 ➢ 它只是在 always 块中赋值的信号。
解 ➢ 开关级:有关物理形状和布局参数的模块,非
常难理解
2020/12/10
7
抽象级别和综合与仿真的关系
➢ 行为仿真:行为的验证和验证模块分割的合理性 ➢ 前仿真:即RTL级仿真,检查有关模块逻辑执行
步骤是否正确。 ➢ 逻辑综合:把RTL级模块转换成门级。 ➢ 后仿真:用门级模型做验证,检查门的互连逻辑
➢研究并行快速算法
➢电路实现问题
➢设计并研制具有并行结构的数字和计算 逻辑结构。
➢电路实现的两个方向:
➢ FPGA
➢专用集成电路
➢Verilog HDL建模、仿真、综合和全面 验证。
2020/12/10
2
什么是复杂的数字逻辑系统?
➢ 嵌入式微处理机系统 ➢ 数字信号处理系统 ➢ 高速并行计算逻辑 ➢ 高速通信协议电路 ➢ 高速编码/解码、加密/解密电路 ➢ 复杂的多功能智能接口 ➢ 门逻辑总数超过几万门达到几百甚至达几
Verilog HDL数字系统设计课件

11/0 0?/0
1?/0
第一章 先进先出数据缓冲器设计
1.1 FIFO工作原理
先进先出 数据管理
ph-----头指针(指向第一个数据) pe------尾指针(指向第一个空单元)
判缓冲器空条件: 当pe=ph--------空 判缓冲器满条件: 当pe+1=ph-----满
clk nreset fifo_in fifo_rd fifo_wr
12.试以调用库函数的方法设计一个容量为8K×24bit的 RAM。其双向数据线为D [0:23],地址线为A[0:12],写 信号为new (低电平有效),读信号为nrd(低电平有效)。 13.设计一个位宽为8位、深度为8层的堆栈。 14.试按下图设计VerilogHDL模型。
1?/0 10/1 s4 01/1 1?/0 00/0 s3 10/1 01/0 s0 00/1 s1 00/0 00/0 s2 ?1/0 01/1
数字系统实例:
FIFO 异步串行通信接口 调制解调器 I2C接口的EEPROM读写器 CISC CPU RISC CPU
复习
例1:一个挂在总线上的8位寄存器。 module register0(db,nce,nwe) ; inout[7:0] db ; input nce,nwe; reg[7:0] q; assign db= (nce ||(!nwe))?8'bzzzzzzzz :q; always @(posedge nwe) begin if(nce==0) q<=db; end endmodule
//FIFO //Size:255Bytes module fifo(clk,nreset,pe,ph,fifo_in,fifo_out,fifo_wr,fifo_rd, busy,empty,full,state,wr,rd); input clk,nreset,fifo_wr,fifo_rd;// input[7:0] fifo_in; output[1:0] state; output empty,full,wr,rd,busy;// output[7:0] fifo_out,pe,ph; reg[1:0] state; reg[7:0] fifo_out; reg wr,rd,empty,full;//fifo write , read ,empty , full reg[7:0]pe,ph; //fifo point:P_end,P_head parameter write=1,read=2,stop=0;
Verilog数字钟设计

hclk<=0;
end
end
////////小时计时模块///
assign h_clk=hclk||counta;//////h_clk 产生进位或校正改变
assign cta=(num4&clk)|(!num4&h_clk); //cta 用于计时、校时中的小时计数
always @(posedge cta)
Hale Waihona Puke always @(posedge ctb)
if(ahour==8'h23) ahour<=0;
else
if(ahour[3:0]==9)
begin ahour[3:0]<=0; ahour[7:4]<=ahour[7:4]+1; end
else ahour[3:0]<=ahour[3:0]+1;
endmodule
else
begin counta<=change; {LD_min,LD_hour}<=1; end/////指示当前调整的是小时
always @(posedge clk_2) if ( cnt5 < 10/2-1) /////////////////////////////////////////10 分频,生成 1kHz 标准信号 begin cnt5<= cnt5 + 1; end
else begin cnt5<= 0; clk_1k<= ~clk_1k; end
代码如下:
//fenpin module fenpin(clk,clk_1Hz,clk_100Hz,clk_1k); output clk_1Hz,clk_100Hz,clk_1k; input clk; reg clk_1Hz=0,clk_3=0,clk_1=0,clk_2=0,clk_1k=0; reg [6:0] cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0; wire clk_100Hz; always @(posedge clk) begin if ( cnt1 < 156/2-1) /////////////////////////////////////////////156 分频,生成 1MHz 信号 begin cnt1 <= cnt1 + 1; end else begin cnt1 <= 0; clk_1 <= ~clk_1; end end
数字系统设计与verilog_HDL课程设计--实用多功能数字钟

数字系统设计与verilogHDL课程设计设计题目:实用多功能数字钟专业:电子信息科学与技术摘要本课程设计利用QuartusII软件Verilog VHDL语言的基本运用设计一个多功能数字钟,经分析采用模块化设计方法,分别是顶层模块、alarm、alarm_time、counter_time、clk50mto1、led、switch、bitel、adder、sound_ddd、sound_ddd_du模块,再进行试验设计和软件仿真调试,分别实现时分秒计时、闹钟闹铃、时分秒手动校时、时分秒清零,时间保持和整点报时等多种基本功能。
单个模块调试达到预期目标,再将整体模块进行试验设计和软件仿真调试,已完全达到分块模式设计功能,并达到设计目标要求。
关键字:多功能数字钟、Verilog、模块、调试、仿真、功能目录1.课程设计的目的及任务............................................................. 错误!未定义书签。
1.1 课程设计的目的 (4)1.2 课程设计的任务与要求 (4)2.课程设计思路及其原理 (4)3.QuartusII软件的应用 (5)3.1工程建立及存盘 (5)3.2工程项目的编译 (6)3.3时序仿真 (6)4.分模块设计、调试、仿真与结果分析 (7)4.1 clk50mto1时钟分频模块 (7)4.2 adder加法器模块 (7)4.3 hexcounter16 进制计数器模块 (8)4.4 counter_time 计时模块 (8)4.5 alarm闹铃模块 (9)4.6 sound_ddd嘀嘀嘀闹铃声模块 (9)4.7 sound_ddd_du嘀嘀嘀—嘟声音模块 (10)4.8 alarm_time闹钟时间设定模块 (10)4.9 bitsel将输出解码成时分秒选择模块 (11)4.10 switch去抖模块 (11)4.11 led译码显示模块 (12)4.12 clock顶层模块 (12)5.实验总结 (14)5.1调试中遇到的问题及解决的方法 (14)5.2实验中积累的经验 (14)5.3心得体会 (14)6.参考文献 (15)1.1 课程设计的目的通过课程设计的锻炼,要求学生掌握V erilog HDL语言的一般设计方法,掌握VerilogHDL语言的基本运用,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,基于实践、源于实践,实践出真知,实践检验真理,培养学生的创新精神。
最新Verilog课件 第十二讲 多时钟域数字系统设计例40页PPT

谢谢
11、越是没有本领的就越加自命不凡。——邓拓 12、越是无能的人,越喜欢挑剔别人的错儿。——爱尔兰 13、知人者智,自知者明。胜人者有力,自胜者强。——老子 14、意志坚强的人能把世界放在手中像泥块一样任意揉捏。——歌德 15、最具挑战性的挑战莫过于提升自我。——迈克尔·F·斯特利
最新Verilog课件 第十二讲 多时钟域 数字系统设计例
46、法律有权打破平静。——马·格林 47、在一千Βιβλιοθήκη 法律里,没有一盎司仁 爱。— —英国
48、法律一多,公正就少。——托·富 勒 49、犯罪总是以惩罚相补偿;只有处 罚才能 使犯罪 得到偿 还。— —达雷 尔
50、弱者比强者更能得到法律的保护 。—— 威·厄尔
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
写地址总是超前于读地址。
FIFO空、满判别:当读写地址相等时,FIFO可能为空,也 可能为满,需引入1bit附加地址位辅助判别。
FIFO的地址指针分析
FIFO的地址指针分析
因正常工作时写地址总是超前于读地址,设读地址为FIFO存储
器的当前页,附加地址位记录写地址是在当前页或环回页。若 读写附加地址位相等,则读写地址都在当前页;若读写附加地 址位不相等,则写地址在环回页。 例1:读写附加地址位相等,表示读写地址都在当前页。
FIFO的地址指针分析
例4:读写附加地址位不相等,表示写地址在环回页;若此时读写
地址也相等;则表示写地址赶上读地址,FIFO写满。
写入(1_0011)
读出(0_0011)
同步FIFO设计
在同步FIFO中,wclk和rclk是同源时钟或相同时钟,处于同一 个时钟域,共用一个复位rst_n,属于全同步设计。 同步FIFO的一种verilog设计描述如下:
第十二讲 多时钟域数字系统设计
多时钟域设计概念 握手协议 FIFO(先入先出队列)概念 FIFO的地址指针分析
同步FIFO设计
异步FIFO设计 实验要求
多时钟域设计概念
同步设计的时钟域:由一个同源时钟驱动的触发器集合称为一个
时钟域。
异步信号
D Q D Q D Q D Q
Guards against metastability(防止不确定状态) Signal from CLK1 domain (CLK1的相关信号) Signal synched to CLK2 (同步于CLK2的信号)
D FF1
Q
D FF2
Q
CLK2
多比特异步信号同步:在许多应用中,跨时钟域传送的不只是简
FIFO(先入先出队列)概念
FIFO功能:是一个先入先出的队列。如图所示,当写使能有效(winc= 1),FIFO队列存储器非满(wfull=0)时,每个wclk的上升沿(或下降 沿)写入wdata数据到异步FIFO的双口SRAM存储器中,写地址增加1;当 读使能有效(rinc=1),FIFO队列存储器非空(rempty=0)时,每个 rclk的上升沿(或下降沿)从异步FIFO的双口SRAM存储器中读出数据到 rdata,读地址增加1。读写地址到最大后返回起始地址。当写地址赶上 读地址时FIFO满,当读地址赶上写地址时FIFO空。
异步FIFO设计
根据前面的分析,可以设计异步FIFO框图:
异步FIFO模块和读空判别
fifomem.v:异步FIFO的数据存储器模块,典型的同步写入双口 RAM。 sync_r2w.v:异步FIFO的读地址信号到写时钟域同步模块。(注: 强烈建议将异步信号同步电路设为一个单独的模块。) sync_w2r.v:异步FIFO的写地址信号到读时钟域同步模块。 rptr_empty.v:异步FIFO的读地址和读空信号产生模块。 wptr_full.v:异步FIFO的写地址和写满信号产生模块。 FIFO空指示产生:如前分析,rgnext是读地址的N比特Gray码, rwptr2是wptr同步后写地址的N比特Gray码;若rgnext==rwptr2, 则FIFO读空。
reg [ASIZE:0] wptr; reg [ASIZE:0] rptr;
// 写地址 // 读地址
同步FIFO设计
parameter MEMDEPTH = 1<<ASIZE; // 5’b1_0000 reg [DSIZE-1:0] ex_mem [0:MEMDEPTH-1]; always @(posedge wclk or negedge rst_n) if (!rst_n) wptr <= 0; else if (winc && !wfull) begin ex_mem[wptr[ASIZE-1:0]] <= wdata; wptr <= wptr+1; end always @(posedge rclk or negedge rst_n) if (!rst_n) rptr <= 0; else if (rinc && !rempty) rptr <= rptr+1; assign rdata = ex_mem[rptr[ASIZE-1:0]]; assign rempty = (rptr == wptr); // 空判别 // 满判别 assign wfull = ((wptr[ASIZE-1:0] == rptr[ASIZE-1:0]) && (wptr[ASIZE] != rptr[ASIZE] )); // FIFO读操作 // FIFO写操作
总线数据的FIFO同步
用握手同步方式,可以同步握手信号,但不能同步高速总线数据。 总线数据通过保持寄存器传递,它在接收电路采样前一直保持稳定。 注意,如果传输电路向接收电路传递数据太快,如达到时钟速率, 则采用握手的总线同步失效。 解决办法是使用 FIFO。一般使用 FIFO 的目的是实现速度匹配,在 FIFO 较快的端口处理猝发的数据传输,而较慢的端口则维持恒定的 数据流。虽然访问方式和速度不同,但进出 FIFO 的平均数据速率 必须是相同的,否则 FIFO 就会出现上溢(overflow)或下溢 (underflow)问题。
双N比特Gray码计数器
在双N比特Gray码计数器框图中,(N-1)比特Gray码最高比特位是通过 对N比特Gray码的最高2比特进行“异或”产生,低(N-2)比特与N比特 Gray码相同。 二进制到Gray码转换:gnext=(bnext>>1)^ bnext; Gray码到二进制转换:for(i=0; i<=N; i=i+1) bin[i]=^(gin>>i);
endmodule
异步FIFO设计问题
wclk和rclk是不同源时钟,属于2个时钟域。 为复位可靠,需分别设复位信号wrst_n和rrst_n。
在FIFO的空满状态判别中,需用到2个时钟域的地址信号,涉及 跨时钟域信号可靠传输问题。
若读写地址使用二进制编码,在跨时钟域传输时,会产生多比特 同时变化问题。例7->8的二进制码变化为0111->1000,同时有 4个比特变化。 异步FIFO仿真验证问题。仿真验证异步FIFO的正确性需在后仿真 阶段进行,且发现所有潜在问题几乎是不可能的。
解决方法有两个,一是采用握手方式传输多比特异步信号;二是 使用gray码编码解决多比特同时变化问题。
握手方式空满判别存在较大延时,较好的方法是采用gray码编码 的读写地址方式。
Gray码计数器
Gray码是Frank Gray 在1953年提出的,它最大的优点是相邻码字间只有 1比特的变化。Gray码计数器长度一般是2的N次方。 如图示,为4比特Gray码到3比特Gray码转换。同时产生N比特Gray码到 (N-1)比特Gray码的计数器,这里称双N比特Gray码计数器。
Req Ack Data
同步电路
同步电路 数据保持
数据采样
电路B
电路A
握手协议
不同时钟域电路使用的握手协议有两种基本类型:全握手(Fullhandshake)和部分握手(partial-handshake)。二种类型的握手都
要用同步器,各有自Байду номын сангаас的优缺点。
全握手:双方电路在声明或中止各自的握手信号前都要等待对方 的响应。如图: 首先,电路 A 发出请求信号 Req,然后电路 B 检测到Req有 效后,发出响应信号Ack;当电 路 A 检测到Ack有效后,中止 自己的Req;最后,当电路 B 检测到Req无效后,它中止自己 的Ack。电路 A 检测到无效的 Ack前,不会再发出新的Req。
握手协议
通过检测请求与响应信号,全握手协议中每个电路都清楚地知道 对方的状态,因此全握手协议可靠性高。不足之处是完成交互的
整个过程要花费较多时钟周期(12个时钟周期)。
部分握手:使用部分握手协议时,通信双方的电路都不等对方的 响应就中止各自的握手信号,并继续执行握手命令序列。
部分握手协议比全握手协议在可靠性方面稍弱。但是,由于无需
握手协议
第二种部分握手方法:电路 A 用一个单时钟宽度脉冲发出它的请
求,而电路 B 也用一个单时钟宽度脉冲响应这个请求。
通过控制电路 A请求信号的延时和电路 B响应信号的延时,可以 控制同步器可靠接收握手脉冲。 这种部分握手技术与全握手方法相比,在 A 时钟域少用三个时钟 周期,在 B 时钟域也少用三个时钟周期。
rdata
rclk
FIFO
rrst_n rinc rempty
wclk: 输入写时钟
wdata:写入数据 wrst_n:wclk时钟域电路复位,为0复位。 winc: 写入使能,为1允许写。 wfull: FIFO存储写满指示,为1指示写满。
rdata: 读出数据
rrst_n : rclk 时钟域电路复位,为 0 复位。 rinc: 读出使能,为1允许读。 rempty:FIFO存储读空指示,为1指示读空。
写入(0_0011)
读出(0_0001)
FIFO的地址指针分析
例2:读写附加地址位相等,表示读写地址都在当前页;若此时读 写地址也相等;则表示读地址赶上写地址,FIFO读空。
写入(1_0011)
读出(1_0011)
例3:读写附加地址位不相等,表示写地址在环回页。
写入(1_0010)
读出(0_0011)
等待对方电路的响应,完成交互的整个过程花费时间较少。
握手协议
第一种部分握手方法:电路 A 以有效电平声明其请求信号,电路 B 则以一个单时钟宽度脉冲作为响应。 注意,电路 A 中止请求信号后,延时至少要有一个时钟周期后, 再发下一次请求信号;否则,电路 B 就不能区别前一个请求和新 的请求。通过控制电路 A请求信号的延时,控制电路 B同步器接 收到的脉冲间隔。 这种部分握手方法比全 握手方法在 A、B 两个 时钟域分别少用了两个 和一个时钟周期。