FPGA之旅设计第六例-----动态数码管
本文介绍了FPGA旅行的第六个示例设计,即驾驶动态数字管。数字管显示的动态变化范围为0到9 ,并且可以在视觉上显示内部信息。
该示例使用通用的积极数字管,并详细说明了有关硬件电路连接以及如何使用Verilog代码应用动态数字管显示屏。
在硬件电路中,每个数字管都有8 个LED灯,并且当前的数字管通过LED1 启用了LED 8 芯片选择。
当多路复用时,正常的正数字管为此LED提供了光。
此示例使用常见的积极数字管。
在Verillog代码实现中,要显示的字符被转换为通过解码过程可以通过数字管识别的表单。
如果显示各自的字符,则将打开LED灯A,B,G,C,D,其余的将关闭。
字符性能是通过解码字节值获得的,例如,与字母2 相对应的字节值为0xA4 动态数字管的关键是切换到芯片选择,以便在许多数字管上显示各种信息。
当需要显示许多数据时,通过在末尾来回切换来显示芯片的选择。
在此示例中,测试模块解码和芯片选定的开关转到函数的纯度旨在验证。
显示了模拟的波形显示,并且解码数据对应于芯片选择信号,证明了动态数字管显示功能是正常的。
可以通过遵循微信官方帐户获得整个项目代码。
FPGA与电脑串口通信verilog程序
//该模块的任务是验证与PC实施基本串行通信的任务。为了验证程序的功能,有必要在// PC上安装串行调试工具。
//该程序应用一个串行端口控制//控制器,该控制器向框架发送1 0位(即没有权益位)。
串行端口的电池程序由定义的DIV_PAR参数确定。
该程序当前规定的DIV_PAR的值为0x1 4 5 ,相同的BOD速率//为9 6 00。
每个位的周期时间被8 杆发送或接受,以将每个位的周期时间分为8 次,以同步通信。
接受后,在7 -Khand数字管上显示FPGA。
//视频教程适合我们2 1 DA电子模块化的所有学习板(CLK,RST,RXD,TXD,TXD,EN,SEG_DATA,KEY_INPUT,LOWBIT)。
tput [7 :0] seg_data; OUTUTUTOLOWIT; , , , 分隔计数器,频划分值由波特率确定。
频分之后,时钟reg [2 :0] div8 _tras_reg以8 次频率接收BOD速率; //此寄存器的计数值对应于传输时位置的插槽数[2 :0] div8 _rec_reg; //批准的状态注册regclkbaud_tras; //以BOD率的频率启用信号regclkbaud_rec; //启用信号regclkbaud8 x关于BOD速率的频率; //频率为8 次的时钟的BOD速率用于将发送或接收到8 次接收的时钟周期。
Reg; // 发送注册reg [7 :0] rxd_buff; //接受数据缓存REG [7 :0] TXD_BUFF; d_state; //每个键按向PC发送一个“接收”字符串,发送位置寄存器注册rege [1 9 :0] cnt_delay; , , , , , , ///频率8 // guna波的速度加倍。
, , , , , , ////// tart_delaycnt)beginif(cnt_delay! endelsebegincnt_delay <= 0; start_delaycnt <= 0; Endendelsebeginif (Key_input & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & KNTLAY (! == 2 0'd8 00000)startif(!key_input)key_ntry1 <= 1 ; pose@(pose)posedgeclk) / / / / 8 -times bod rate bort bort速率argine arthifif(! 其他_rec_reg+1 ; //接收开始后,将插槽数添加到1 个循环e,并使用8 个bod rate clock ndalways@(posdgeclkbaud8 xornegedge)startif(!st)div8 _tras_reg <= 0; 其他kbaud_rec = 1 ; //在插槽的第七次,接收胜任信号是有效的,并且数据记录在elseclkb aud_rec = 0中; endalways@(div8 _tras_reg)begineif(div8 _tras_reg == 7 )clkbaud_tras = 1 ; //第七次,有效的信号是有效的,并且发送数据。
t <= 0; txd_buf <= 0; state_tras <= 0; send_state <= 0; key_entry2 <= 0; endelsebeginif(!key_ntry2 )startif(key_entry1 )begienkey_entry2 <= 1 ; txd_buf f(!trassStart && send_state <7 )trassStart <= 1 ; elllowif(send_state <7 )begineif(clkbaud_tras)begintxd_reg <= 0; state_tras <= state_tras+1 ; endEndelsebinke's_ntry 2 clkbaud_tras)begintxd_reg <= txd_buf [0]; txd_buf [6 :0] <= txd_buf [7 :1 ]; state_tras buf [7 :1 ]; state_tras <= state_tras+1 ; endend4 'b001 1 :start //第三位(clkbaud_tras)begintxd_reg <= txd_buff [0]; txd_buf [6 :0] <= txd_buf [7 :1 ]; txd_b uf [0]; txd_buf [6 :0] <= txd_buf [7 :1 ]; state_tras <= state_tras+1 ; endend4 'b01 01 :begin //第五位(clkbaud_tras +1 ; endendEnd4 'b01 1 0:begi n //发送第6 位,如果(clkbaud_taras)begintxd_reg <= txd_buf [0]; txd_buf [7 :1 ] <= txd_buf [7 :1 ];clkbaud_tras begintxd_reg <= txd_buf [0]; txd_buf [6 :0] xd _reg <= 1 ; txd_buf <= 8 'h5 5 ; state_tras <= state_tras+1 ; endend4 'b1 1 1 1 :begineif(clkbaud_tras)beginstate_tras <= state_tras+1 ; send_state <= send_state+1 ; trassstart <= 0; 3 'b001 :txd_buf <= 8 'd3 2 ; //“” 3 'b01 0:txd_buf <= 8 'd6 9 ; :txd_buf <= 0; endCaseendDefault:beginif(clkbaud_tras)beginstate_tras <= state_tras+1 ; trassstart <= 1 ; endendCasendalways@(posedgeclkbaud8 xornegedge)<= 0; rec tart_tmp <= 0; endelsebeginrxd_reg1 <= rxd; rxd_reg2 <= rxd_reg1 ; if(state_rec = 0)begineif(recstart_tmp = 1 )rectrecstart <= 1 ; 检测到起始位的下降边缘。
,输入接受状态。
b aud_rec)beginstate_rec
用verilog语言设计一个六位数码管动态显示从左到右为123456?
下面是一个简单的VerilogHDL代码,可以在右侧的左侧(1 2 3 )4 4 5 6 实现动态显示的六位数数字管的效果。Modulesix_Digit_display(CK,RESET,DIGIT_OUT); //输出inputclk,// output //输出///////////////// (posedgeclkornkornegedgerererererererererererererererererererererererererererererererererererererererererererererererarer)0(reset == 0)begakecunter <= 0; endel_digit_display,具有endelsebit_display = [2 5 :2 0]:此代码中的endEndModule,该代码具有具有模块的模块,并且digit_out =:clk,reset_ reset和digit_out。
符号在六个digit_display模块中,我们使用计数器控制时钟符号到达时显示的数字。
对比[2 5 :2 0])选择显示的数字。
具体来说,我们使用语句的数组来替换要显示的数字,并输出到Digit_out符号的Digit数组中的相应数字。
当边缘重置符号到达时,将计数器和数字管输出信号重置为0到数字管开始炫耀最左侧的数字。
因此,随着时钟符号的总是更改,数字管在左侧的左侧动态显示数字序列(1 2 3 )4 4 5 6
急!!!verilog自动售货机
我自己写了。Moduleshumiji(clk,a,b,duanxuan,weixuan,out,out1 ); inputclk; inputa,b; // a-entry信号0.5 yuan,b是输出信号1 元[8 :1 ] duanxuan; // out 8 -bit选择,当Sode-selection退出时,// Sode-selection选择Sode-selection Sode-selection Sodate-selection Selection selements Out Output1 ; // ou当T1 高水平时,请找到0.5 元的Regweixuan; Reg [8 :1 ] Duanxuan; Reg [3 1 :0]计数; //数字动态扫描扫描扫描[3 1 :0] Count1 ; //用于计算打开交易机器的时间[4 :1 ] A1 ,B1 ; //使用使用A1 ,B1 来拘留投资于硬币,硬币,硬币,硬币,硬币,硬币,硬币,硬币,硬币Inman的数字。
始终@(posgeDoroSgeout)beginif(out == 1 )a1 <= 0; //苏打水从elsea1 <= a1 +4 'b1 出来之后,该帐户的价值被清洗; 由于苏打水为2 .5 ,因此您可以给出5 0.5 元的elseifs(a1 == 3 && b1 == 1 )out <= 1 ; //您可以给出3 个0.5 元和1 1 元埃斯(a1 == 1 && b1 == 2 )输出<= 1 ; //您可以给出1 0.5 元和2 1 元= 0 && b1 == 0)//如果没有人放硬币,则两个数字数字管将显示0 beginif(count == 5 0)//如果数字管在实际工作期间闪烁,则可以为beginwexuan <= 1 'b0配置值的值; duanxuan <= 8 'B001 1 1 1 1 1 1 ; // 0endif(count == 1 00)//如果数字管道在实际工作中闪烁,则可以配置BeginWexuan <= 1 'b1 的值; 1 )//硬币输入为0.5 元,显示为0.5 ,假设数字管是缝制<= count+1 的常见阴极; if(count == 5 0)//如果数字管道在实际工作中闪烁,则可以配置beginwexuan <= 1 'b0的值; duanxuan <= 8 'b01 1 01 1 01 ; // 5 endif(count = buts = stragulle -vicale; duanxuan <= 8 'B1 01 1 1 1 1 1 ; // 0.count <= 0; endEndEldelSeif(b == 1 )// 1 yuan coin和01 Begincount <= count+1 ; 如果== 5 0)// endendif(out == 1 )beginif(count1 == 3 000)//在3 秒内打开门。