• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

電話撥號(hào)顯示器verilog代碼ego1開發(fā)板vivado軟件

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

1-23112422300QO.doc

共1個(gè)文件

名稱:電話撥號(hào)顯示器verilog代碼ego1開發(fā)板vivado軟件(代碼在文末下載)

軟件:VIVADO

語言:Verilog

代碼功能:

電話撥號(hào)顯示:

1、具體0~9的數(shù)字按鍵。

2、有開始、撥出、接通、刪除按鍵。

3、按下“開始”按鍵后,可以按數(shù)字鍵進(jìn)行撥號(hào),每按一次數(shù)字,整體號(hào)碼左移一位,輸入錯(cuò)誤時(shí)可以刪除。

4、輸入完號(hào)碼后,按下“撥出鍵”撥出,此時(shí)號(hào)碼會(huì)在數(shù)碼管上滾動(dòng)顯示。

5、按下“接通”鍵后,開始通話計(jì)時(shí),數(shù)碼管顯示時(shí)間分、秒。

FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com

本代碼已在ego1開發(fā)板驗(yàn)證,開發(fā)板如下,其他開發(fā)板可以修改管腳適配:

ego1開發(fā)板.png

演示視頻:

設(shè)計(jì)文檔:

1. 工程文件

2. 程序文件

3. 程序編譯

4. RTL圖

5. 管腳分配

6. Testbench

7. 仿真圖

整體仿真圖

電話輸入模塊

控制模塊

顯示模塊

部分代碼展示:

//控制模塊
module?tele_ctrl(
input?clk,//50M
input?reset,//復(fù)位
input?key_start,//開始
input?key_call,//撥出
input?key_connect,//接通
input?[43:0]?telephone_num,//輸入號(hào)碼
output?[31:0]?display_number,//顯示值
output?[2:0]?current_state//當(dāng)前狀態(tài)
);
parameter?second_time_cnt=32'd100_000_000;
//定義狀態(tài)
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;
//狀態(tài)機(jī)控制
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://計(jì)時(shí)
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)//計(jì)時(shí)
if(second_cnt>=second_time_cnt)begin//計(jì)時(shí)1秒
second_cnt<=32'h0;
second_en<=1;
end
else?begin
second_cnt<=second_cnt+32'h1;//計(jì)數(shù)
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)//計(jì)時(shí)狀態(tài)
if(second>=8'd59)begin//計(jì)時(shí)1秒
second<=8'h0;
minute<=minute+8'h1;//分計(jì)時(shí)
end
else?begin
second<=second+8'h1;//秒計(jì)時(shí)
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)//撥號(hào)
number<=telephone_num;
else?if(state==s_shift?&&?second_en)//1秒移位1次
number<={number[39:0],number[43:40]};
else?if(state==s_time)//顯示時(shí)間
number<={32'd0,minute_ten,minute_one,second_ten,second_one};
assign?display_number=number[31:0]?;
endmodule

點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=310

  • 1-23112422300QO.doc
    下載

相關(guān)推薦