第四章时序逻辑电路设计
1' h1 -B[8..0]
9' h1FD --
+
ADDER
cnt[7..0]
PRE Q
qd[7..0]
Add0
A[7..0] B[7..0]
MUX21 MUX21 MUX21
8' h01 --
+
ADDER
CLR
clk d[7..0] clear load
第四章 时序逻辑电路设计实例
module counter(clk,clk_1s);//时钟频率50MHz 分频计数器 input clk; out clk_1s; reg clk_1s; reg[24:0]c; always@(posedge clk) begin if(c<'d25_000_000) c<=c+1; else begin c<=0; clock=~clock; end end endmodule
第四章 时序逻辑电路设计实例
测试波形和仿真结果
第四章 时序逻辑电路设计实例
具有并行置数和使能控制输入的移位寄存器
ena
R0 load R1
w D Q
Q D Q
clock reset
Q0 Q1Biblioteka 第四章 时序逻辑电路设计实例
module shiftregs(R,load,ena,w,clock,Q,reset); 具有并行置数和使能控制输入的移位寄存器
module regena (clock,ena,reset,R,Q); parameter n=8; reg [n-1:0] Q; input [n-1:0] R; ena input clock,ena,reset; Q R output [n-1:0] Q; ? D Q always @(posedge clock or negedge reset) clock begin if (!reset) Q<=0; reset else if (ena) Q<=R; end endmodule
第四章 时序逻辑电路设计实例
分频计数器
Add1
A[3..0] B[3..0]
count[3..0]~reg0
PRE D Q
4' h1 --
+
c~[24..0]
ADDER
count[3..0]
clock c[24..0]
PRE OUT0 D Q
B[24..0] A[24..0]
Add0
A[24..0] B[24..0]
第四章 时序逻辑电路设计实例
加减法计数器
该计数器有1个加/减控制端up_down,当 该端口为高电平时,实现加法计数;为低电平 时,实现减法计数。load为同步预置端, clear则是同步清零端(低电平有效)
updown_count d[7..0] clk
qd[7..
第四章 时序逻辑电路设计实例
第四章 时序逻辑电路设计实例
综合设计举例—跑马灯
`timescale 1ns/100ps module testbench(); parameter PERIOD=20; reg reset; reg clock; initial begin clock=0; reset=0; #(PERIOD*3.7) reset=1; #(PERIOD*4.5) reset=0; end always #10 clock =~clock; main #(5) uut(reset,clock,led); endmodule
第四章 时序逻辑电路设计实例
综合设计举例—数字钟
module countern(pulse_in,reset,data,c); parameter COUN_SIZE = 6; parameter COMP_DATA = 6'd59; input pulse_in,reset; output [COUN_SIZE-1:0] data; output c; reg [COUN_SIZE-1:0] data; reg c; always@(posedge pulse_in or posedge reset) if (reset) begin data <= 0; c <= 1'b0 ; end else if(data == COMP_DATA) begin data <= 0; c <= 1'b1 ; end else begin data <= data + 1; c <= 1'b0 ; end endmodule //countern
第四章 时序逻辑电路设计实例
综合设计举例—数字钟
任务:设计一个数字钟,由四个七段数码管分 别显示小时的十位、个位,分钟的十位个位 分析:应有分频模块产生1秒的基准频率;六十 进制计数器(分频器)产生分钟和小时;七段 数码管译码器; 由于计数器(分频器)产生的分钟和小时是二 进制,要转化为十进制方便显示
第四章 时序逻辑电路设计实例
时序逻辑电路设计要点
输出不只是输入的逻辑电平的函数,还与电 路所处的状态有关 由多个触发器和多个组合逻辑块组成的网络。 常用的有:计数器、复杂的数据流动控制逻 辑、运算控制逻辑、指令分析和操作控制逻 辑。同步时序逻辑的设计是设计复杂的数字 逻辑系统的核心
第四章 时序逻辑电路设计实例
综合设计举例—跑马灯
module clkgen(reset,clock,clkdiv); parameter DIV_SIZE=25; input reset; input clock; output clkdiv; reg[DIV_SIZE-1:0] counter; always @(posedge clock or posedge reset) if(reset) counter<=0; else counter<=counter+1; assign clkdiv=counter[DIV_SIZE-1]; endmodule
SEL DATAA DATAB
LessThan0
PRE D Q
ENA CLR
25' h0000000 --
25' h0000001 --
+
ADDER
25' h17D7840 -ENA
<
ENA CLR
MUX21
CLR
LESS_THAN
clk reset
第四章 时序逻辑电路设计实例
综合设计举例—跑马灯
设计一个走马灯程序,要求led0先亮,然后 led1,led2,以此类推,并不断循环
clkgen:clkuut reset clock
reset reset clkdiv clock clock led[7..0]
shifter8:shifteruut led[7..0]
第四章 时序逻辑电路设计实例
60进制计数器 产生小时
hex2dec:h2d_h h7segment:disp_hh
countern:hour
clk
hourh[6..0]
reset
3'NC --
h7segment:disp_hl
1秒基准 频率产生
60进制计数 器产生分钟
data_hex[5..0]
60进制计数 器产生小时
hex2dec:h2d_m
module regena_test; reg clock,ena,reset; reg [7:0] R; wire [7:0] Q; regena test(.clock(clock),.ena(ena),.reset(reset),.R(R),.Q(Q)); always #10 clock=~clock; initial begin reset=1;ena=0;R=8'd0;clock=0; #10 reset=1;R=8'd1; #10 reset=0;R=8'd2; #10 reset=1;R=8'd3; #10 ena=1;R=8'd16; #10 R=8'd4; #10 R=8'd5; #10 R=8'd6; #10 R=8'd7; #100 $stop; end endmodule
module main(reset,clock,led); parameter DIV_SIZE =25; input reset; input clock; output [7:0] led;
wire clklhz; clkgen #(DIV_SIZE) clkuut(reset,clock,clklhz); shifter8 shifteruut(reset,clklhz,led); endmodule
data_dec[7..0]
data_hex[3..0]
segment[6..0]
hourl[6..0]
h7segment:disp_mh minuteh[6..0]
把分钟和小 时的二进制 数据转化为 十进制数据
data_hex[3..0]
segment[6..0]
七段数码管译 码器
3'NC --
h7segment:disp_ml minutel[6..0]
input [3:0] R; input w, load, ena, reset, clock; output [3:0] Q; reg [3:0] Q; integer k; always@(posedge clock or negedge reset) begin if (reset) Q <=0; else if (load) Q<=R; else if (ena) begin Q[0] <= W; for (k=1; k<4; k=k+1) Q[k] <=Q[k-1]; end end endmodule