例1-3-3设计一个六十进制加法计数器。 原理图输入法实现时,参考电路如图1-3-4所示,硬件系统示意图如图1-3-5所示。 COUNTER 图1-3-4六十进制计数器 L8 23”q20q13”q10 FPGA/COLD 1HZ reset clk 晶振 图1-3-5六十进制计数器硬件系统示意图 用Ⅴ erilog hdl实现时,代码为: module jsq60(qh, ql, clk, reset) output[3: 0Jqh; output[3: 01ql: reg 3: 0]gh reg [ 3: 0]ql; input clk, reset; al ways @(posedge clk or negedge reset l10
q<=q+1; end end endmodule 例 1-3-3 设计一个六十进制加法计数器。 原理图输入法实现时,参考电路如图 1-3-4 所示,硬件系统示意图如图 1-3-5 所示。 图 1-3-4 六十进制计数器 图 1-3-5 六十进制计数器硬件系统示意图 用 Verilog HDL 实现时,代码为: module jsq60(qh,ql,clk,reset); output[3:0]qh; output[3:0]ql; reg [3:0] qh; reg [3:0] ql; input clk,reset; always @(posedge clk or negedge reset) 110
if(reset)iqh, ql)<=0; if((gh, ql =8 h59)(qh, ql<=0; else begin if(ql==9 )begin ql<=0; qh<=qh+l; end 1.4扫描显示电路 以上的设计中,设计验证采取的方式是将设计文件下载至PLD芯片后,根据管脚分配 的结果,将输出管脚接至发光管,改变数据开关的电平,验证发光管的状态是否满足设计 要求。在设计译码器时,这种验证方式是很直观的,但在计数器设计时,这样的验证方式 就显得很不直观,尤其当计数器的位数增加时(如百进制计数),太多的发光管将使结果 的读出非常困难。 数码管显示是计数器等电路的最好选择。半导体数码管的外形和等效电路如图1-4-1 所示,其每一个字段都是一个发光二极管( Light emitting diode,简称LED),因而也把 它叫做LED数码管或LED七段(带小数点时为八段)显示器 平4 图1-4-1数码管及其等效电路 数码管可以用TIL或CMOS集成电路直接驱动,其驱动方式有两种 、BCD码驱动方式 这种驱动方式由BCD七段显示驱动器7448给出数码管所需的驱动电平,硬件连接 电路如图1-4-2所示,当7448的输入端四位二进制数时,数码管根据表1-4-1的关系显示 相应的字形。 BS201A bI/RBo Y RBI GnD Y 图1-42用7448驱动数码管的连接方式
begin if(~reset){qh,ql}<=0; else begin if({qh,ql}==8'h59){qh,ql}<=0; else begin if(ql==9)begin ql<=0;qh<=qh+1;end else ql<=ql+1; end end end endmodule 1.4 扫描显示电路 以上的设计中,设计验证采取的方式是将设计文件下载至 PLD 芯片后,根据管脚分配 的结果,将输出管脚接至发光管,改变数据开关的电平,验证发光管的状态是否满足设计 要求。在设计译码器时,这种验证方式是很直观的,但在计数器设计时,这样的验证方式 就显得很不直观,尤其当计数器的位数增加时(如百进制计数),太多的发光管将使结果 的读出非常困难。 数码管显示是计数器等电路的最好选择。半导体数码管的外形和等效电路如图 1-4-1 所示,其每一个字段都是一个发光二极管(Light Emitting Diode,简称 LED),因而也把 它叫做 LED 数码管或 LED 七段(带小数点时为八段)显示器。 图 1-4-1 数码管及其等效电路 数码管可以用 TTL 或 CMOS 集成电路直接驱动,其驱动方式有两种: 1、BCD 码驱动方式 这种驱动方式由 BCD-七段显示驱动器 7448 给出数码管所需的驱动电平,硬件连接 电路如图 1-4-2 所示,当 7448 的输入端四位二进制数时,数码管根据表 1-4-1 的关系显示 相应的字形。 D C B A 图 1-4-2 用 7448 驱动数码管的连接方式 111
表1-4-1BCD七段显示译码器的真值表 输入 输出 D C B A Ya yb Y。 Yd YeYr Yg 字形 00 0 00000000 0000 01 0000 10 0110 100 00 001 01 10 101 ll111 5 0 10 6 10000 00 8 0000 01 111001 9 10 111011 l111 001111 b 00 1001110 01 011110 0 100111 l11 E 100011 F 2、直接驱动方式 这种驱动方式直接对数码管相应的字段给出驱动电平,显示字形。真值表如表1-42 所示 表1-4-2直接驱动显示真值表 输入 输出字形 abcdefg 0110000 l111001 0110011 011011 1011111 6 l110000 l111011 l110111 0011111 0111101 1001111 1000111 实际PLD器件验证设计结果时,以上两种驱动数码管的方式都可以使用,例如,图 l12
表 1-4-1 BCD-七段显示译码器的真值表 输入 输出 D C B A Ya Yb Yc Yd Ye Yf Yg 字形 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0 0 1 1 0 1 1 0 1 1 1 1 1 0 0 1 0 1 1 0 0 1 1 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 0 0 1 1 1 1 0 1 1 0 0 1 1 1 1 1 0 0 0 1 1 1 0 1 2 3 4 5 6 7 8 9 A b C d E F 2、直接驱动方式 这种驱动方式直接对数码管相应的字段给出驱动电平,显示字形。真值表如表 1-4-2 所示。 表 1-4-2 直接驱动显示真值表 输入 a b c d e f g 输出字形 1 1 1 1 1 1 0 0 1 1 0 0 0 0 1 1 0 1 1 0 1 1 1 1 1 0 0 1 0 1 1 0 0 1 1 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 0 0 1 1 1 1 0 1 1 0 0 1 1 1 1 1 0 0 0 1 1 1 0 1 2 3 4 5 6 7 8 9 A B C D E F 实际 PLD 器件验证设计结果时,以上两种驱动数码管的方式都可以使用,例如,图 112
1-2-16的连接中,MI、M2、M3、M4可以用BCD码驱动,表1-22中F10K10的管脚10、 11、16、17就是数码管M4的BCD输入信号 当采用直接驱动方式时,驱动一个数码管需要七个电平信号,如果系统用来显示结果 的数码管较多,应考虑数字系统输出信号占用PLD芯片管脚的问题,因为PLD芯片的管 脚总数是有限的,例如F10K10,它的管脚总数是84,其中还有一些特定功能的管脚不能 给用户使用,能使用的管脚不到60个,所以直接驱动时,必须设法减少占用PLD芯片的 管脚的数量 解决的方法是采用动态扫描显示,如图1-4-3所示,将所有数码管(8个)的相应字 段并联在一起,由 FPGA/CPLD的输出信号a、b.g直接驱动相应字段,由片选信号MS1、 MS2..MS8决定选中的是哪个数码管,数码管显示何种字形由表1-4-2决定。 Hs8 H57 Hs 1 1…1 ,, FPGNCPLD 图1-4-3动态扫描显示原理图 例1-4-1设计一个电路,使八个数码管依次同时显示0、1、2 A、B、C、E、F。 此电路包含一个动态扫描信号产生模块和一个十六进制计数器,参考电路如图1-4-4 所 动态扫描信号产生模块可以由计数器和译码器构成。上面的一片74161构成三位二进 74161 decoder COUNTER 动态扫描 十六进 制计数 ⊥ed CLK COUNTER 字形显示 图1-4-4动态扫描信号产生电路
1-2-16 的连接中,M1、M2、M3、M4 可以用 BCD 码驱动,表 1-2-2 中 F10K10 的管脚 10、 11、16、17 就是数码管 M4 的 BCD 输入信号。 当采用直接驱动方式时,驱动一个数码管需要七个电平信号,如果系统用来显示结果 的数码管较多,应考虑数字系统输出信号占用 PLD 芯片管脚的问题,因为 PLD 芯片的管 脚总数是有限的,例如 F10K10,它的管脚总数是 84,其中还有一些特定功能的管脚不能 给用户使用,能使用的管脚不到 60 个,所以直接驱动时,必须设法减少占用 PLD 芯片的 管脚的数量。 解决的方法是采用动态扫描显示,如图 1-4-3 所示,将所有数码管(8 个)的相应字 段并联在一起,由 FPGA/CPLD 的输出信号 a、b…..g 直接驱动相应字段,由片选信号 MS1、 MS2…..MS8 决定选中的是哪个数码管,数码管显示何种字形由表 1-4-2 决定。 例 1-4-1 设计一个电路,使八个数码管依次同时显示 0、1、2、……A、B、C、E、F。 此电路包含一个动态扫描信号产生模块和一个十六进制计数器,参考电路如图 1-4-4 所示。 动态扫描信号产生模块可以由计数器和译码器构成。上面的一片 74161 构成三位二进 113 图 1-4-4 动态扫描信号产生电路 图 1-4-3 动态扫描显示原理图 动态扫描 字形显示 十六进 制计数
制加法计数器,其输出Qc、QB、BA送例1-2-2设计的3线8线译码器 decoder,则在时钟 脉冲ck作用下,Msl到MS8依次产生“1”信号,连接到八个数码管的片选端后,即依次 选中八个数码管,当时钟clk足够快时,人眼就不能分辨数码管的选中次序了,看到的将 是八个数码管同时被选中 下面的一片74161是十六进制加法计数器,led是一个字形显示模块,它是由 Verilog HDL文件产生的符号体。在ck1作用下,D[3.0从0,1,…F变化时,由led模块输出 的字段驱动电平使八个数码管显示正确的字形,代码如下: module led(a, b, c, d, e, f, g, D) output a, b, c, d, e, f, g: input 3: 0 D eg a, b, c, d, e, f, g (D) 4d0: fa, b, c, d, e, f, g =7'bll1lllo 4dl:{ab,c,d,e,fg}=7b010000 4d2: (a, b, c, d, e, f g)=7'bl101101; 4d3: (a, b, c, d, e, f g =7'bllll001 4d4: (a, b, c, d, e, f, g)=7'b0110011; 4d5:{ab,cd,e,fg}=7bl01011 4d6: (a, b, c, d, e, f, g)=7'b101ll1l 4d7: (a, b, c, d, e, f, g)=7'b1110000 4d8: (a, b, c, d, e, f,g =7'blllllll; 4d9: fa, b, c, d, e, f g)=7blll101l default: a,b, c, d, e, f, g)=7'bx end endmodule 硬件系统示意图如图1-4-5所示,则当clk的频率较大,clkl选择1HZ时,会看到八 个数码管同时依此显示0、1、2、…A、B、C、D、E、F。 Hs8 H57 ■… P6NVCPLD el clk 晶振1H clkIreset 9 图1-4-5例1-41硬件系统示意图 114
制加法计数器,其输出QC、QB、BA送例 1-2-2 设计的 3 线-8 线译码器decoder,则在时钟 脉冲clk作用下,MS1 到MS8 依次产生“1”信号,连接到八个数码管的片选端后,即依次 选中八个数码管,当时钟clk足够快时,人眼就不能分辨数码管的选中次序了,看到的将 是八个数码管同时被选中。 下面的一片 74161 是十六进制加法计数器,led 是一个字形显示模块,它是由 Verilog HDL 文件产生的符号体。在 clk1 作用下,D[3..0]从 0,1,….F 变化时,由 led 模块输出 的字段驱动电平使八个数码管显示正确的字形,代码如下: module led(a,b,c,d,e,f,g,D); output a,b,c,d,e,f,g; input[3:0] D; reg a,b,c,d,e,f,g; always @(D) begin case(D) 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; default:{a,b,c,d,e,f,g}=7'bx; endcase end endmodule 硬件系统示意图如图 1-4-5 所示,则当 clk 的频率较大,clk1 选择 1HZ 时,会看到八 个数码管同时依此显示 0、1、2、……A、B、C、D、E、F。 114 图 1-4-5 例 1-4-1 硬件系统示意图