Verilog HDL 之 顺序脉冲发生器

合集下载

veriloghdl程序大全

veriloghdl程序大全

1.简单门电路的设计二输入与非门module nand_2(y,a,b);output y;input a,b;nand(y,a,b);endmodule二输入异或门module nand_2(y,a,b);output y;input a,b;reg y;always @(a,b)begincase({a,b})2’b00:y=1;2’b01:y=1;2’b10:y=1;2’b11:y=0;default:y=’bx;endcaseendendmodule二输入三态门module eda_santai(dout,din,en); output dout;input din,en;reg dout;alwaysif (en) dout<=din;else dout<=’bz;endmodule3-8译码器的设计module yimaqi(S1,S2,S3,A,Y); input S1;wire S1;input S2;wire S2;input S3;wire S3;input [2:0]A;wire [2:0]A;output[7:0]Y;reg [7:0]Y;reg s;always@(S,S1,S2,S3)begins<=S2|S3;Y <=8'b1111_1111;else if(S)Y <=8'b1111_1111;elsecase(A)3'b000:Y<=11111110;3'b001:Y<=11111101;3'b010:Y<=11111011;3'b011:Y<=11110111;3'b100:Y<=11101111;3'b101:Y<=11011111;3'b110:Y<=10111111;3'b111:Y<=01111111;endcaseendendmodule2.8-3编码器的设计module banjiaqi(a,b,count,sum);input a;wire a;input b;wire b;output count;wire count;output sum;wire sum;assign {count,sum}=a+b;endmodule4. D触发器的设计module Dchufaqi ( Q ,CLK ,RESET ,SET ,D ,Qn ); input CLK ;wire CLK ;input RESET ;wire RESET ;input SET ;wire SET ;input D ;wire D ;output Q ;reg Q ;output Qn ;wire Qn ;assign Qn = ~Q ;always @ ( posedge CLK or negedge SET or negedge RESET ) beginif ( !RESET)Q <= 0 ;else if ( ! SET)Q <= 1;else Q <= D;endendmodule5. 1位半加法器的设计module banjiafaqi(a,b,sum,count);input a;wire a;input b;wire b;output sum;wire sum;output count;wire count;assign {count,sum}=a+b;endmodule6. 4位计数器的设计module sihisjishuqi(CLK,RESET,out);input CLK;wire CLK;input RESET;wire RESET;output[3:0] out;reg[3:0] out;always @ ( posedge CLK or negedge RESET )beginif(!RESET)out<=4'b0000;elsebeginout<=out+1;if(out==4'b1010)out<=4'b0000;endendendmodule7.分频时序逻辑电路的设计module eda_fp_even(clk_out,clk_in,rst); input clk_in;input rst;wire rst;output clk_out;reg clk_out;reg [1:0]cnt;parameter N=6;always @(posedge clk_in or negedge rst) beginif(!rst)beginclk_out<=0;cnt<=0;endelsebegincnt<=cnt+1;if(cnt==N/2-1)beginclk_out=!clk_out;cnt<=0;endendendendmodule8.7段显示译码器的设计module eda_scan_seven(clk,dig,y,rst); input clk;wire clk;input rst;wire rst;output[7:0] dig;wire[7:0] dig;output [7:0]y;wire [7:0]y;reg clkout;reg [19:0]cnt;reg [2:0]wei;reg [3:0]duan;reg [6:0]Y_r;reg [7:0]dig_r;assign y = {1'b1,(~Y_r[6:0])};assign dig =~dig_r;parameter period= 1000000;always@(posedge clk or negedge rst) beginif(!rst)cnt<=0;else begincnt<=cnt+1;if(cnt==(period>>1)-1)clkout<=#1 1'b1;else if(cnt==period-1)beginclkout<=#1 1'b0;cnt<=#1 1'b0;endendendalways@(posedge clkout or negedge rst ) beginif(!rst)wei<=0;elsewei<=wei+1;endalways @(wei) //数码管选择begincase ( wei )3'b000 :begindig_r <= 8'b0000_0001;duan <= 1;end3'b001 :begindig_r <= 8'b0000_0010;duan<= 3;end3'b010 :begindig_r <= 8'b0000_0100;duan<= 5;end3'b011 :begindig_r <= 8'b0000_1000;duan <= 7;end3'b100 :begindig_r <= 8'b0001_0000;duan<= 9;end3'b101 :begindig_r <= 8'b0010_0000;duan<= 11;end3'b110 :begindig_r <= 8'b0100_0000;duan <= 13;end3'b111 :begindig_r <= 8'b1000_0000;duan<= 15;endendcaseendalways @ ( duan ) //译码begincase ( duan )0: Y_r = 7'b0111111; // 01: Y_r = 7'b0000110; // 12: Y_r = 7'b1011011; // 23: Y_r = 7'b1001111; // 34: Y_r = 7'b1100110; // 45: Y_r = 7'b1101101; // 56: Y_r = 7'b1111101; // 67: Y_r = 7'b0100111; // 78: Y_r = 7'b1111111; // 89: Y_r = 7'b1100111; // 910: Y_r = 7'b1110111; // A11: Y_r = 7'b1111100; // b12: Y_r = 7'b0111001; // c13: Y_r = 7'b1011110; // d14: Y_r = 7'b1111001; // E15: Y_r = 7'b1110001; // Fdefault: Y_r = 7'b0000000;endcaseendendmodule9.数据选择器的设计module eda_8xuanyi (A,D0,D1,D2,D3,D4,D5,D6,D7,G,Y); input D0,D1,D2,D3,D4,D5,D6,D7,G;input [2:0]A;wire [2:0]A;output Y;reg Y;always @(A, G)beginif (G==0)Y<=0;elsecase(A)3'b000:Y=D0;3'b001:Y=D1;3'b010:Y=D2;3'b011:Y=D3;3'b100:Y=D4;3'b101:Y=D5;3'b110:Y=D6;3'b111:Y=D7;endcaseendendmodule10.数据锁存器的设计module e da_suocunqi(q,d,oen,g); output[7:0] q;//数据输出端input[7:0] d;//数据输入端input oen,g;//三态控制端reg[7:0] q;always @(*)beginif (oen)beginq<="z";endelsebeginif(g)q<=d;elseq<=q;endendendmodule11.数据寄存器的设计module eda_jicunqi(r,clk,d,y); input r,clk;input [7:0]d;wire [7:0]d;output [7:0]y;reg [7:0]y;always @ (posedge clk or negedge r) beginif(!r)y<=8'b00000000;elsey<=d;endendmodule12.顺序脉冲发生器的设计module eda_shunxu(clk,clr,q);input clk,clr;output [7:0]q;reg [7:0]q;always @ ( posedge clk or posedge clr ) beginif ( clr==1)beginq<=8'b00000000; //赋初值endelsebeginif(q==0)q<=8'b00000001;elseq<=q<<1; //给初值进行移位endendendmodule13.1位全加法器的设计module quanjiaqi(a,b,sum,count,cin); input a;wire a;input b;wire b;input cin;wire cin;output sum;wire sum;output count;wire count;assign{sum,count}=a+b+cin; endmodule15.键控Led灯的设计module eda_led(led,key);input key;output led;reg led_out;assign led<=led_out;always@(key)beginif(key)led_out<=1;else if(!key)led_out<=0;endendmodule16.双向移位寄存器的设计module eda_yiweijicunqi( left_right ,load ,clr ,clk ,DIN ,DOUT );input left_right ;wire left_right ;input load ;wire load ;input clr ;wire clr ;input clk ;wire clk ;input [3:0] DIN ;wire [3:0] DIN ;output [3:0] DOUT ;wire [3:0] DOUT ;reg [3:0] data_r;assign DOUT = data_r ;always @ (posedge clk or posedge clr or posedge load)//敏感变量,看真值表beginif(clr==1)data_r <= 0;//判断是否清零else if (load )data_r<=DIN;//判断是否装载数据//判断进行左移位还是右移位elsebeginif(left_right)data_r<=DIN<<1;elsedata_r<=DIN>>1;endendendmodule17.8-3优先编码器的设计module youxianbianma( A ,I ,GS ,EO ,EI ); input [7:0] I ;wire [7:0] I ;input EI ;wire EI ;output [2:0] A ;reg [2:0] A ;output GS ;reg GS ;output EO ;reg EO ;always @ ( I or EI )if ( EI )beginA <= 3'b111;GS <= 1;EO <= 1;endelse if (I==8'b11111111)beginA <= 3'b111;GS <= 1;EO <= 0;endelse if ( I==8'b11111110 )beginA <= 3'b111;GS <= 0;EO <= 1;endelse if ( I==8'b1111110x )beginA <= 3'b110;GS <= 0;EO <= 1;endelse if ( I==8'b111110xx )beginA <= 3'b101;GS <= 0;EO <= 1;endelse if ( I==8'b11110xxx )beginA <= 3'b100;GS <= 0;EO <= 1;endelse if ( I==8'b1110xxxx )beginA <= 3'b011;GS <= 0;EO <= 1;endelse if ( I==8'b110xxxxx )beginA <= 3'b010;GS <= 0;EO <= 1;endelse if ( I==8'b10xxxxxx )beginA <= 3'b001;GS <= 0;EO <= 1;endelse if ( I==8'b0xxxxxxx )beginA <= 3'b000;GS <= 0;EO <= 1;endendmodule18.数据分配器的设计module shujufenpeiqi(y0,y1,y2,y3,din,a); output y0,y1,y2,y3;//4??êy?Yí¨μàinput din;//êy?Yê?è?input [1:0] a;reg y0,y1,y2,y3;always @(din,a)beginy0=0;y1=0;y2=0;y3=0; //3?ê??ˉ£á?case(a)00:y0=din;01:y1=din;02:y2=din;03:y3=din;endcase end endmodule。

02-26.1 顺序脉冲发生器-课件

02-26.1 顺序脉冲发生器-课件
(一)当顺序脉冲数较少时,可以用移位寄存器构成。 例:当环形计数器工作在每个状态只有一个1(或0)
的循优环点状:态电时路,结它构就比是较一简个单顺,序不脉必冲附发加生译器码。电路。 缺点:使用触发器的数目比较多,状态利用率低,同时 还必须采用能自启动的反馈逻辑电路。
《数字电子技术基础》
第二十六讲 其它常见时序逻辑电路及竞争-冒险现象
波形变坏。
《数字电子技术基础》
第二十六讲 其它常见时序逻辑电路及竞争-冒险现象
◆ 改进方案二: ★ 引入选通脉冲:
选通脉冲的有效时间应与触发器的翻转时间错开。
图3 用中规模集成电路加选通脉冲构成的顺序脉冲发生器 《数字电子技术基础》
第二十六讲 其它常见时序逻辑电路及竞争-冒险现象
◆ 改进方案二:
或脉冲分配器,其功能是把输入的脉冲序列变换 成一组在时间上顺序出现的脉冲。
★ 顺序脉冲发生器在计算机和其它许多数 字系统中都有较广泛的应用,如CPU中指令节拍发 生器,多点参数巡检的通道切换控制信号等。
《数字电子技术基础》
第二十六讲 其它常见时序逻辑电路及竞争-冒险现象
█ 顺序(节拍)脉冲发生器设计
(二)当顺序脉冲数较多时,可以用计数器和译码器组合 成顺序脉冲发生器。
例:
图1 用计数器和译码器组成的顺序脉冲发生器电路图 《数字电子技术基础》
第二十六讲 其它常见时序逻辑电路及竞争-冒险现象
001→000→010
缺点:由于使用了异步 CP 1
2
3
4
5ቤተ መጻሕፍቲ ባይዱ
6
7
8
9
t
计数器,在电路状态转 P0 t
换时三个触发器翻转时
《数字电子技术基础》
第二十六讲 其它常见时序逻辑电路及竞争-冒险现象

高二物理竞赛课件电路序列脉冲发生器的设计

高二物理竞赛课件电路序列脉冲发生器的设计

Q n1 3
Q3Q2
Q2Q1Q0
Q n1 2
Q3Q2Q1
Q3Q2Q0
Q2Q1Q0
Q n1 1
Q1Q0
Q1Q0
Q n1 0
Q3Q0
Q2Q0
Q n1 3Βιβλιοθήκη (Q2Q1Q0)Q3
Q2Q3
Q n1 2
(Q1Q0 )Q2
(Q3
Q1Q0 )Q2
Q n1 1
Q0Q1
Q0Q1
Q n1 0
(Q3
Q2
)Q0
1
Q0
注:在变换Q3n+1时,删去了约束项Q3Q2Q2Q1
电路序列脉冲发生器的设计
电路序列脉冲发生器的设计
有些数字电路需要不同宽度分配脉冲,在 时间上可重叠,也可以不重叠。如图所示给出 了一个分配器的波形图,下面就来讨论如何设 计这个分配器的计数器和译码器。
CP
P0
P1
7TCP
P2
P3
P4
序列脉冲波形图
如果选用JK触发器组成该时序电路,可将状态方程 改写成JK触发器的标准形式 Qn1 JQ n KQn
画出电路图
得出完整的状态转换图,验证能否自启动
例:设计一个串行数据检测器。要求:连续输入3个或3个 以上的1时输出为1,其他情况下输出为零
1. 逻辑抽象,画出状态转换图
设电路在没有1输入时状态为S0, 输入一个1后状态为S1,连续 输入两个1后状态为S2,连续三次或三次以上输入1后状态为S3。
写出驱动方程
Q n1 3
(Q2Q1Q0 )Q3
Q2Q3
Q n1 2
(Q1Q0 )Q2
(Q3
Q1Q0 )Q2
Q n1 1

EDA技术与Verilog_HDL(潘松)第6章习题答案

EDA技术与Verilog_HDL(潘松)第6章习题答案

6-1 在Verilog设计中,给时序电路清零(复位)有两种不同方法,它们是什么,如何实现?答:同步清零、异步清零,在过程语句敏感信号表中的逻辑表述posedge CLK用于指明正向跳变,或negedge用于指明负向跳变实现6-2 哪一种复位方法必须将复位信号放在敏感信号表中?给出这两种电路的Verilog 描述。

答:异步复位必须将复位信号放在敏感信号表中。

同步清零:always @(posedge CLK) //CLK上升沿启动Q<=D; //当CLK有升沿时D被锁入Q异步清零:always @(posedge CLK or negedge RST) begin //块开始if(!RST)Q<=0; //如果RST=0条件成立,Q被清0else if(EN) Q<=D;//在CLK上升沿处,EN=1,则执行赋值语句end//块结束6-3 用不同循环语句分别设计一个逻辑电路模块,用以统计一8位二进制数中含1的数量。

module Statistics8(sum,A); output[3:0]sum;input[7:0] A;reg[3:0] sum;integer i;always @(A)beginsum=0;for(i=0;i<=8;i=i+1) //for 语句if(A[i]) sum=sum+1;else sum=sum;endendmodule module Statistics8(sum,A); parameter S=4;output[3:0]sum;input[7:0] A;reg[3:0] sum;reg[2*S:1]TA;integer i;always @(A)beginTA=A; sum=0;repeat(2*S)beginif(TA[1])sum=sum+1;TA=TA>>1;endendendmodulerepeat循环语句for循环语句module Statistics8(sum,A);parameter S=8;output[3:0]sum;input[7:0] A;reg[S:1] AT;reg[3:0] sum;reg[S:0] CT;always @(A) beginAT={{S{1'b0}},A}; sum=0; CT=S;while(CT>0) beginif(AT[1])sum=sum+1;else sum=sum;begin CT= CT-1; AT=AT>>1; end end endendmodule6-3 用不同循环语句分别设计一个逻辑电路模块,用以统计一8位二进制数中含1的数量。

FPGA实现可编程单脉冲发生器设计

FPGA实现可编程单脉冲发生器设计

可编程单脉冲发生器设计可编程单脉冲发生器是一种脉冲宽度可编程的信号发生器,其输出为TTL 电平。

在输入按键的控制下,产生单次的脉冲,脉冲的宽度由8位的输入数据控制(以下称之为脉宽参数)。

由于是8位的脉宽参数,故可以产生255种宽度的单次脉冲。

在目标板上,I0~I7用作脉宽参数输入,PULSE_OUT用做可编程单脉冲输出,而KEY和/RB作为启动键和复位键。

图3示出了可编程单脉冲发生器的电路图。

图3 可编程单脉冲发生器的电路图8.3.1 由系统功能描述时序关系可编程单脉冲发生器的操作过程是:(1) 预置脉宽参数。

(2) 按下复位键,初始化系统。

(3) 按下启动键,发出单脉冲。

以上三步可用三个按键来完成。

但是,由于目标板已确定,故考虑在复位键按下后,经过延时自动产生预置脉宽参数的动作。

这一过程可用图4的时序来描述。

图4 可编程单脉冲发生器的时序图图中的/RB为系统复位脉冲,在其之后自动产生LOAD脉冲,装载脉宽参数N。

之后,等待按下/KEY键。

/KEY键按下后,单脉冲P_PULSE便输出。

在此,应注意到:/KEY的按下是与系统时钟CLK不同步的,不加处理将会影响单脉冲P_PULSE的精度。

为此,在/KEY按下期间,产生脉冲P1,它的上跳沿与时钟取得同步。

之后,在脉宽参数的控制下,使计数单元开始计数。

当达到预定时间后,再产生一个与时钟同步的脉冲P2。

由P1和P2就可以算出单脉冲的宽度Tw。

8.3.2 流程图的设计根据时序关系,可以做出图5所示的流程图。

在系统复位后,经一定的延时产生一个预置脉冲LOAD,用来预置脉宽参数。

应该注意:复位脉冲不能用来同时预置,要在其之后再次产生一个脉冲来预置脉宽参数。

为了产生单次的脉冲,必须考虑到在按键KEY有效后,可能会保持较长的时间,也可能会产生多个尖脉冲。

因此,需要设计一种功能,使得当检测到KE Y有效后就封锁KEY的再次输入,直到系统复位。

这是本设计的一个关键所在。

6顺序脉冲发生器

6顺序脉冲发生器
W2 Q1nQ0n W3 Q1nQ0n
W0
1
W0
W1
1
W2
1
W3
1
W1 W2
W3
&
&
&
&
J CP
F0
Q0
Q0
J
F1
Q1
Q1
K
K
F0 、 1 构成一 F 位异步四进制 减法计数器。
顺序脉冲发生器(3)
计数型顺序脉冲发生器可能出现竞争冒险
CP
Q0
1 2
3
4
5
消除方法?
Q1
W0
W1 W2
当同一个门电路的两个输 入信号同时向相反的方向变 化时,可能产生冒险。
设初始状态为 Q3Q2Q1Q0 0001
0001 0010 0100
D
F0
Q
D
F1
Q
D
F2
Q
D
F3
Q
CP
自循环移位寄存器 优点:具有输出端轮流为1的特点,可直接利 用其输出作为节拍信号而无需任何译码电路。
缺点:(1)状态利用率低;(2)不能自启动
1000
顺序脉冲发生器(5)
能够自启动的环形计数器

顺序脉冲发生器通常由计数器 与译码电路构成,如图所示: 分类 计数型 =计数器+译码器 移存型 =移位寄存器+译码器
译码器

CP
时钟
模M计数器
顺序脉冲发生器(2)
计数型顺序脉冲发生器
译码电路
CP
Q0
1
2
3
4
5
如图所示为一位异步四进制计数器与译码电路构 Q1 W0 Q1nQ0n W1 Q1nQ0n 成的顺序脉冲发生器。

verilog写脉冲展宽电路_概述及解释说明

verilog写脉冲展宽电路_概述及解释说明

verilog写脉冲展宽电路概述及解释说明1. 引言1.1 概述在现代电子设备和数字系统中,脉冲展宽电路起着重要的作用。

它可以将一个输入信号的短暂脉冲扩展为持续一段时间的高电平输出信号。

这种功能对于许多应用来说是必不可少的,例如触发器、计时器、通信系统以及各种数字逻辑电路等。

本文将详细介绍脉冲展宽电路的定义、原理以及Verilog语言编写脉冲展宽电路的方法。

通过阐述Verilog编程语言的概述和基本语法规则,读者可以更好地理解和实现脉冲展宽电路。

1.2 文章结构本文共分为五个部分进行论述。

第一部分为引言,主要概述了文章要探讨的内容和目的。

第二部分介绍了脉冲展宽电路的定义、意义以及常见应用场景。

第三部分向读者简要介绍了Verilog编程语言,包括其概述、库函数介绍以及代码基本结构和语法规则。

第四部分详细描述了脉冲展宽电路的Verilog设计与实现方法,包括设计思路和步骤、关键模块分析与设计要点,以及实例演示和仿真结果分析。

最后一部分为结论与总结,对Verilog脉冲展宽电路的重要性和应用前景进行总结陈述,并提出了本文所提出的设计方法的优势、不足以及改进建议等内容。

1.3 目的本文的目的是介绍脉冲展宽电路及其在数字系统中的重要性和应用前景。

通过对Verilog编程语言的简介和具体实现方法的讲解,读者可以深入了解该电路的设计原理和实现过程,并能够运用Verilog语言进行脉冲展宽电路的设计与仿真。

通过阅读本文,读者将会掌握以下几个方面:- 掌握脉冲展宽电路的定义、意义以及常见应用场景;- 了解Verilog编程语言概述,包括库函数介绍和基本语法规则;- 理解脉冲展宽电路的Verilog设计思路、步骤以及关键模块分析与设计要点;- 学会使用Verilog语言进行脉冲展宽电路的实例演示和仿真,并能分析相关结果;- 总结对Verilog脉冲展宽电路设计方法和优势、不足的认识,并提出改进建议。

通过本文的学习和实践,读者将对脉冲展宽电路的设计与应用有更深入的理解,并能够掌握Verilog语言进行相关工程实现。

基于FPGA的时序脉冲发生器设计

基于FPGA的时序脉冲发生器设计

基于FPGA的时序脉冲发生器设计颜丽;王伟【摘要】In the design of realization to the timing pulse generator, field programmable gate array was used to change the traditional methods of design, and made modifying and debugging hardware more facilitate. The working principle of a standard binary counter formed timing pulse generator was analyzed comprehensively, the improving method was take to eliminate the predominance of "competition - adventure" produce by the standard binary counter formed timing pulse generator, Johnson counter was used as the counter of a timing pulse generator counter, and used of the SR function method further simplify the circuit, thereby timing pulse interference presents a method to eliminate reasonable. The reasonable method to eliminate the "competition - adventure"interference of timing pulse was taken.%本文在实现时序脉冲发生器的设计中,利用现场可编程门阵列改变了传统设计方法,进一步方便了对硬件的修改与调试。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档