此例也可以完全由 Verilog hDl文件完成,参考代码为 module saomiao(reset, clk, clkl, msl, ms2, ms3, ms4, ms5, ms6, ms7, ms8, a, b, c, d, e, f, g) 30]nl; output msl, ms2, ms3, ms4, ms5, ms6, ms7,ms8, a, b, c, d, e, f, g reg msl, ms2, ms3, ms4, ms5, ms6, ms7, ms8, a, b, c, d, e, f, g reg 3: 0] temp, flag al ways@(posedge clk) (msl, ms2, ms3, ms4, ms5, ms6, ms7, ms8 =8'b00000000 flag=flag+I case(flag) 0 begin temp=inl; msl=l; end 1: begin temp=inl; ms2=l; end 2: begin temp=inl; ms3=1; end 3 begin temp=inl; ms4=l; end 4 begin temp=inl; ms 5=1; end 5: begin temp=inl; ms6=1; end 6: begin temp=inl; ms7=1; end 7 endcase 4d0: (a, b, c, d, e, f g=7blllll10 4dl: a, b, c, d, e, f, g =7b0110000 4d2: a,b, c, d, e, f, g)=7b1101101 4d3: ( a, b, c, d, e, f g =7b11l1001 4d4: (a, b, c, d, e, f g)=7b0110011 4d5: (a, b, c, d, e, f, g)=7b1011011; 4d6: a, b, c, d, e, f, g)=7b1011lll 4d7: ( a, b, c, d, e, f g =7'b1110000, 4d8: (a, b, c, d, e, f g=7bllllll 4d9: a, b, c, d, e, f, g)=7blll101l; 4hA: a, b, c, d, e, f, g =7'blllolll 4hB: a, b, c, d, e, f g)=7'b0011111 4hC: fa, b, c, d, e, f, g)=7'b1001110; 4hD: a, b, c, d, e, f, g=7'b0111101 4hE: a, b, c, d e, f g=7'b1001111 4hF: a, b, c, d, e, f, g)=7b1000111 default: fa, b, c, d, e, f, gi=7bllll11o encase al ways@(posedge clkI begin if(reset)inI=4b0000 else begin inl=inl+1
此例也可以完全由 Verilog HDL 文件完成,参考代码为: module saomiao(reset,clk,clk1,ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g); input clk,reset,clk1; reg [3:0] in1; output ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g; reg ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g; reg [3:0] temp,flag; always@(posedge clk) begin {ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8}=8'b00000000; flag=flag+1; case (flag) 0:begin temp=in1;ms1=1;end 1:begin temp=in1;ms2=1;end 2:begin temp=in1;ms3=1;end 3:begin temp=in1;ms4=1;end 4:begin temp=in1;ms5=1;end 5:begin temp=in1;ms6=1;end 6:begin temp=in1;ms7=1;end 7:begin temp=in1;ms8=1;end endcase case(temp) 4'd0:{a,b,c,d,e,f,g}=7'b1111110; 4'd1:{a,b,c,d,e,f,g}=7'b0110000; 4'd2:{a,b,c,d,e,f,g}=7'b1101101; 4'd3:{a,b,c,d,e,f,g}=7'b1111001; 4'd4:{a,b,c,d,e,f,g}=7'b0110011; 4'd5:{a,b,c,d,e,f,g}=7'b1011011; 4'd6:{a,b,c,d,e,f,g}=7'b1011111; 4'd7:{a,b,c,d,e,f,g}=7'b1110000; 4'd8:{a,b,c,d,e,f,g}=7'b1111111; 4'd9:{a,b,c,d,e,f,g}=7'b1111011; 4'hA:{a,b,c,d,e,f,g}=7'b1110111; 4'hB:{a,b,c,d,e,f,g}=7'b0011111; 4'hC:{a,b,c,d,e,f,g}=7'b1001110; 4'hD:{a,b,c,d,e,f,g}=7'b0111101; 4'hE:{a,b,c,d,e,f,g}=7'b1001111; 4'hF:{a,b,c,d,e,f,g}=7'b1000111; default:{a,b,c,d,e,f,g}=7'b1111110; endcase end always@(posedge clk1) begin if(!reset) in1=4'b0000; else begin in1=in1+1; 115
例1-4-2设计一个电路,使两个数码管显示1~12的十二进制计数,两个数码管显示 0~59的六十进制计数 六十进制计数器在例1-3-3中设计过了,十二进制计数器也可以仿照完成,现在的问题 是要把两个计数器输出的个位和十位数分别显示在不同的数码管上,相应的数码管选择显 示模块可以用 Verilog HDl文件完成,参考代码如下。Sel模块的原理是:inl,in2……in8 为八个数码管的BCD码输入端数据,MS1有效时,in1的数据送MS1显示;MS2有效时 in2的数据送Ms2显示;……MS8有效时,in8的数据送M8显示。八组数据可以不全部 都有,如此例中,十二进制数的低四位送in1,高四位送in2,六十进制数的低四位送in3, 高四位送in4,其余数据端为空 sel(inl, in2, in3, in4, in5, in6, in7, in8, clk, msl, ms2, ms3, ms4, ms5, ms6, ms7, ms8, a, b, c, d, e,f, g); input clk input 3: 0 inl, in2, in3, in4, in5, in6, in7, in8 output msl, ms2, ms3, ms4, ms5, ms6, ms7, ms8, a, b, c, d, e, f,g: reg msl, ms2, ms3, ms4, ms5, ms6, ms7, ms8, a, b, c, d, e, f, g reg [3: 0] temp, flag Imsl, ms2, ms3, ms4, ms5, ms6, ms7, ms8 =8 b00000000 flag=flag+I case(flag) 0: begin temp=inl; msl=l; end 1: begin temp=in2; ms2=l; end 2: begin temp=in3; ms3=1; end 3: begin temp=in4 ms4=l: end 4 begin temp=in5; ms5=l; end 5: begin temp=in6 ms6=1; end 6: begin temp=in7; ms7=l; end 7: begin temp=in8 ms8=1; end case(temp 4d0: (a, b, c, d, e, f g=7blllll10 4dl:{ab,c,def,g}=7b110000 4d2: a, b, c, d, e, f, g)=7b1101101; 4d3: (a,b, c, d, e, f, g)=7'bl111001 4d4:{ab,cd,e,f,g}=7b01l0011 4d5: (a, b, c, d, e, f, g)=7b1011011; 4d6: a,b, c, d, e, f, g =7bl0lllll 4d7: a, b, c, d, e, f, g)=7b1110000 4d8: (a, b, c, d, e, f, g=7blllllll 4'd9: (a, b, c, d, e, f, g)=7b111101l l16
end end endmodule 例 1-4-2 设计一个电路,使两个数码管显示 1∼12 的十二进制计数,两个数码管显示 0∼59 的六十进制计数。 六十进制计数器在例 1-3-3 中设计过了,十二进制计数器也可以仿照完成,现在的问题 是要把两个计数器输出的个位和十位数分别显示在不同的数码管上,相应的数码管选择显 示模块可以用 Verilog HDL 文件完成,参考代码如下。Sel 模块的原理是:in1,in2……in8 为八个数码管的 BCD 码输入端数据,MS1 有效时,in1 的数据送 MS1 显示;MS2 有效时, in2 的数据送 MS2 显示;……MS8 有效时,in8 的数据送 MS8 显示。八组数据可以不全部 都有,如此例中,十二进制数的低四位送 in1,高四位送 in2,六十进制数的低四位送 in3, 高四位送 in4,其余数据端为空。 module sel(in1,in2,in3,in4,in5,in6,in7,in8,clk,ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g); input clk; input [3:0] in1,in2,in3,in4,in5,in6,in7,in8; output ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g; reg ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g; reg [3:0] temp,flag; always@(posedge clk) begin {ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8}=8'b00000000; flag=flag+1; case (flag) 0:begin temp=in1;ms1=1;end 1:begin temp=in2;ms2=1;end 2:begin temp=in3;ms3=1;end 3:begin temp=in4;ms4=1;end 4:begin temp=in5;ms5=1;end 5:begin temp=in6;ms6=1;end 6:begin temp=in7;ms7=1;end 7:begin temp=in8;ms8=1;end endcase case(temp) 4'd0:{a,b,c,d,e,f,g}=7'b1111110; 4'd1:{a,b,c,d,e,f,g}=7'b0110000; 4'd2:{a,b,c,d,e,f,g}=7'b1101101; 4'd3:{a,b,c,d,e,f,g}=7'b1111001; 4'd4:{a,b,c,d,e,f,g}=7'b0110011; 4'd5:{a,b,c,d,e,f,g}=7'b1011011; 4'd6:{a,b,c,d,e,f,g}=7'b1011111; 4'd7:{a,b,c,d,e,f,g}=7'b1110000; 4'd8:{a,b,c,d,e,f,g}=7'b1111111; 4'd9:{a,b,c,d,e,f,g}=7'b1111011; 116
4hA: a,b, c, d, e, f, g=7'b111011l 4hB: (a, b, c, d, e, f g)=7'b0011111 4hC: (a, b, c, d, e, f g =7'b1001110 4hD: fa, b, c, d, e, f, g)=7'b0111101: 4hE: fa, b, c, d, e, f, g)=7'b1001111 4hF: a, b, c, d e, f, g)=7'b1000111 default: (a, b, c, d, e, f g)=7b1111110 endmodule 生成符号体后,参考电路如图1-4-6所示。 RE5ETQL[3..。1 IN⊥【3..。]s ms4 HH[3 Na[3.。]Ps 图1-4-6例1-4-2参考电路图 图中,jsq60为六十进制计数器,jsq12为十二进制计数器,硬件系统示意图如图1-7 所 l17
4'hA:{a,b,c,d,e,f,g}=7'b1110111; 4'hB:{a,b,c,d,e,f,g}=7'b0011111; 4'hC:{a,b,c,d,e,f,g}=7'b1001110; 4'hD:{a,b,c,d,e,f,g}=7'b0111101; 4'hE:{a,b,c,d,e,f,g}=7'b1001111; 4'hF:{a,b,c,d,e,f,g}=7'b1000111; default:{a,b,c,d,e,f,g}=7'b1111110; endcase end endmodule 生成符号体后,参考电路如图 1-4-6 所示。 图 1-4-6 例 1-4-2 参考电路图 图中,jsq60 为六十进制计数器,jsq12 为十二进制计数器,硬件系统示意图如图 1-4-7 所示。 117
H54 H53 H52 H51 FPGNCPLD 1KHz clk1 abcdef 晶振1Hz clk eset g 图1-4-7例1-4-2硬件系统示意图 1.5数字系统设计例题 设计一个具有三种信号灯的交通灯控制器。设计要求是:由一条主干道和一条支干 道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮 允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。用传感器检测车辆是否到来。 主干道处于常允许通行的状态,支干道有车来时才允许通行,主、支干道均有车时,两者 交替允许通行,主干道每次放行45S,支干道每次放行25S,在每次由绿灯亮到红灯亮的 转换过程中,要亮5S黄灯作为过渡,使行驶中的车辆有时间停到禁行线外,设立45S、 25S、5S计时、显示电路。 这是一个数字系统设计问题,按自顶向下( top-down)的设计方法,整个系统可分为 主控电路、定时电路,译码驱动显示等几个模块,而定时电路可以由45S、25S、5S计数器 功能模块构成,这是我们已经熟悉的功能模块,译码驱动显示可由SSI构成组合逻辑电路 构成,系统框图如图1-5-1所示。 主干道 支干道 红黄绿 红黄绿 译码驱动电路 主干道车辆情青况 支干道车辆情况 主控电路 45秒定时 25秒定时 5秒定时 图1-5-1交通灯控制系统框图 11
图 1-4-7 例 1-4-2 硬件系统示意图 1.5 数字系统设计例题 设计一个具有三种信号灯的交通灯控制器。设计要求是:由一条主干道和一条支干 道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮 允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。用传感器检测车辆是否到来。 主干道处于常允许通行的状态,支干道有车来时才允许通行,主、支干道均有车时,两者 交替允许通行,主干道每次放行 45S,支干道每次放行 25S,在每次由绿灯亮到红灯亮的 转换过程中,要亮 5S 黄灯作为过渡,使行驶中的车辆有时间停到禁行线外,设立 45S、 25S、5S 计时、显示电路。 这是一个数字系统设计问题,按自顶向下(top-down)的设计方法,整个系统可分为 主控电路、定时电路,译码驱动显示等几个模块,而定时电路可以由45S、25S、5S计数器 功能模块构成,这是我们已经熟悉的功能模块,译码驱动显示可由SSI构成组合逻辑电路 构成,系统框图如图1-5-1所示。 图 1-5-1 交通灯控制系统框图 118
在这个设计问题中,主控电路是核心,这是一个时序电路,其输入信号为: (1)车辆检测信号,设为A、B(模拟传感器输出信号)。 (2)45S、25S、5S定时信号,设为C、D、E 其状态表如表1-5-1所列。 表1-5-1状态转换表 状态 主干道 支干道 时间/S 绿灯亮,允许通行红灯亮,禁止通行4 黄灯亮,停车红灯亮,禁止通行5 红灯亮,禁止通行绿灯亮允许通行25 红灯亮,禁止通行黄灯亮,停车 对逻辑变量逻辑赋值为: A=0主干道无车,A=1主干道有车(可始终设为1,使主干道处于常允许通行状态) B=0支干道无车,B=1支干道有车; C=045秒定时未到,C=145秒定时已到; D=025秒定时未到,D=125秒定时已到 E=05秒定时未到,E=15秒定时已到。状态编码为: S=00 S2=11S=10 若选J触发器,其输出为Q2Q1 逻辑赋值后的状态表如表1-5-2所列,逻辑赋值后的状态转换图如图1-5-2所示。 表1-5-2逻辑赋值后状态表 ABCDEQ2QQ"Qm说明 XOXXX0 0 110Xx0000 01XXX 00 01 由Sa→S1 111XX XXXX001 XXXX101 001 维持S1 由S1→>S2 11X0X 1 维持S2 0IXXX XOXXX 由S2→ 1 1X XXXX 维持S3 XXXXI 10 由Sx>S l19
在这个设计问题中,主控电路是核心,这是一个时序电路,其输入信号为: (1) 车辆检测信号,设为A、B(模拟传感器输出信号)。 (2) 45S、25S、5S定时信号,设为C、D、E。 其状态表如表 1-5-1 所列。 表 1-5-1 状态转换表 状态 主干道 支干道 时间/S S0 S1 S2 S3 绿灯亮,允许通行 黄灯亮,停车 红灯亮,禁止通行 红灯亮,禁止通行 红灯亮,禁止通行 红灯亮,禁止通行 绿灯亮,允许通行 黄灯亮,停车 45 5 25 5 对逻辑变量逻辑赋值为: A=0 主干道无车,A=1 主干道有车(可始终设为 1,使主干道处于常允许通行状态); B=0 支干道无车,B=1 支干道有车; C=0 45 秒定时未到,C=1 45 秒定时已到; D=0 25 秒定时未到,D=1 25 秒定时已到; E=0 5 秒定时未到,E=1 5 秒定时已到。状态编码为: S0=00 S1=01 S2=11 S3=10 若选JK触发器,其输出为Q2 Q1 逻辑赋值后的状态表如表 1-5-2 所列,逻辑赋值后的状态转换图如图 1-5-2 所示。 表 1-5-2 逻辑赋值后状态表 A B C D E Q n 2 Qn 1 Q2 n+1 Q1 n+1 说明 0 0 0 0 X 0 X X X 1 1 0 X X 0 1 X X X 1 1 1 X X X X X X 0 X X X X 1 1 1 X 0 X 0 1 X X X X 0 X X X 1 1 X 1 X X X X X 0 X X X X 1 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 1 0 0 0 维持S0 由S0→S1 维持S1 由S1→S2 维持S2 由S2→S3 维持S3 由S3→S0 119