名称:电话拨号显示器verilog代码ego1开发板vivado软件
软件:VIVADO
语言:Verilog
代码功能:
电话拨号显示
1、具体0~9的数字按键
2、有开始、拨出、接通、删除按键
3、按下“开始”按键后,可以按数字键进行拨号,每按一次数字,整体号码左移一位,输入错误时可以删除
4、输入完号码后,按下“拨出键”拨出,此时号码会在数码管上滚动显示
5、按下“接通”键后,开始通话计时,数码管显示时间分、秒
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在ego1开发板验证,开发板如下,其他开发板可以修改管脚适配:
代码下载:电话拨号显示器verilog代码ego1开发板vivado软件名称:电话拨号显示器verilog代码ego1开发板vivado软件(代码在文末下载)软件:VIVADO语言:Verilog代码功能:电话拨号显示1、具体0~9的数字按键2、有开始、拨出、接通、删除按键3、按下“开始”按键后,可以按数字键进行拨号,每按一次数字,整体号码左移一位,输入错误时可以删除4、输入完号码后,按下“拨出键”拨出,此时号码会在数码管上滚动显示5、按下“接通”键后,开始通话计时,http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=310
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. 管脚分配
6. Testbench
7. 仿真图
整体仿真图
电话输入模块
控制模块
显示模块
文章来源:https://www.toymoban.com/news/detail-757012.html
部分代码展示:文章来源地址https://www.toymoban.com/news/detail-757012.html
//控制模块 module tele_ctrl( input clk,//50M input reset,//复位 input key_start,//开始 input key_call,//拨出 input key_connect,//接通 input [43:0] telephone_num,//输入号码 output [31:0] display_number,//显示值 output [2:0] current_state//当前状态 ); parameter second_time_cnt=32'd100_000_000; //定义状态 parameter s_idle=3'd0; parameter s_num=3'd1; parameter s_shift=3'd2; parameter s_time=3'd3; reg [2:0] state=3'd0; assign current_state=state; //状态机控制 always@(posedge clk or negedge reset) if(reset==0) state<=s_idle; else case(state) s_idle: if(key_start)//开始 state<=s_num; s_num: if(key_call)//拨出 state<=s_shift; s_shift://移位 if(key_connect) state<=s_time; s_time://计时 state<=s_time; default:; endcase reg [31:0] second_cnt; reg second_en; always@(posedge clk or negedge reset) if(reset==0)begin second_cnt<=32'h0; second_en<=0; end else if(state==s_time || state==s_shift)//计时 if(second_cnt>=second_time_cnt)begin//计时1秒 second_cnt<=32'h0; second_en<=1; end else begin second_cnt<=second_cnt+32'h1;//计数 second_en<=0; end else begin second_cnt<=32'h0; second_en<=0; end reg [7:0] second; reg [7:0] minute; always@(posedge clk or negedge reset) if(reset==0)begin second<=8'h0; minute<=8'h0; end else if(state==s_time)//计时状态 if(second>=8'd59)begin//计时1秒 second<=8'h0; minute<=minute+8'h1;//分计时 end else begin second<=second+8'h1;//秒计时 minute<=minute; end else begin second<=8'h0; minute<=8'h0; end wire [3:0] second_ten; wire [3:0] second_one; wire [3:0] minute_ten; wire [3:0] minute_one; assign second_ten=second/10; assign second_one=second%10; assign minute_ten=minute/10; assign minute_one=minute%10; reg [43:0] number; always@(posedge clk or negedge reset) if(reset==0) number<=44'h0; else if(state==s_num)//拨号 number<=telephone_num; else if(state==s_shift && second_en)//1秒移位1次 number<={number[39:0],number[43:40]}; else if(state==s_time)//显示时间 number<={32'd0,minute_ten,minute_one,second_ten,second_one}; assign display_number=number[31:0] ; endmodule
到了这里,关于电话拨号显示器verilog代码ego1开发板vivado软件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!