2656|4

6423

帖子

17

TA的资源

版主

楼主
 

EDA实验与实践 uart_test [复制链接]

module uart_test(clock,key,rdata,wen,sdata,seg,dig);
input clock;                            //系统时钟(48MHz)
input[2:0] key;                            //按键输入(KEY1~KEY3)
input[7:0]rdata;                        //接收到的数据
output wen;                                //发送数据使能
output[7:0]sdata;                        //要发送的数据
output[7:0]seg;                            //数码管段码输出
output[7:0]dig;                            //数码管位码输出
//I/O寄存器
reg[7:0]sdata;   
reg[7:0]seg;        
reg[7:0]dig;        
//内部寄存器
reg[16:0]count;                            //时钟分频计数器
reg[2:0]dout1,dout2,dout3,buff;            //消抖寄存器
reg[1:0] cnt;                              //数码管扫描计数器   
reg[3:0]disp_dat;                        //数码管扫描显存        
reg div_clk;                            //分频时钟
wire[2:0]key_edge;                        //按键消抖输出

//时钟分频部分
always @(posedge clock)
begin
    if (count < 17'd120000)
    begin
         count <= count + 1'b1;
         div_clk <= 1'b0;
     end
     else
     begin
         count <= 17'd0;
         div_clk <= 1'b1;
     end
end

//按键消抖部分
always @(posedge clock)
begin
    if(div_clk)
    begin
        dout1 <= key;
        dout2 <= dout1;
        dout3 <= dout2;
    end   
end

//按键边沿检测部分
always @(posedge clock)
begin
    buff <= dout1 | dout2 | dout3;
end

assign key_edge = ~(dout1 | dout2 | dout3) & buff;

//2位16进制数输出部分
always @(posedge clock)                            //按键1
begin
    if(key_edge[0])   
        sdata[7:4] <= sdata[7:4] + 1'b1;
end

always @(posedge clock)                            //按键2
begin
    if(key_edge[1])   
        sdata[3:0] <= sdata[3:0] + 1'b1;
end

assign wen = key_edge[2];                        //按键3

//数码管扫描显示部分
always @(posedge clock)                   //定义上升沿触发进程
begin
    if(div_clk)
        cnt <= cnt + 1'b1;
end

always @(posedge clock)                           
begin
    if(div_clk)
    begin
        case(cnt)                                //选择扫描显示数据
            2'd0:disp_dat = sdata[7:4];            //第一个数码管
            2'd1:disp_dat = sdata[3:0];            //第二个数码管
            2'd2:disp_dat = rdata[7:4];            //第七个数码管
            2'd3:disp_dat = rdata[3:0];            //第八个数码管
        endcase
        case(cnt)                                //选择数码管显示位
            2'd0:dig = 8'b01111111;                //选择第一个数码管显示
            2'd1:dig = 8'b10111111;                //选择第二个数码管显示
            2'd2:dig = 8'b11111101;                //选择第七个数码管显示
            2'd3:dig = 8'b11111110;                //选择第八个数码管显示
        endcase   
    end
end

always @(disp_dat)
begin
    case(disp_dat)                        //七段译码
        4'h0:seg = 8'hc0;                //显示0
        4'h1:seg = 8'hf9;                //显示1
        4'h2:seg = 8'ha4;                //显示2
        4'h3:seg = 8'hb0;                //显示3
        4'h4:seg = 8'h99;                //显示4
        4'h5:seg = 8'h92;                //显示5
        4'h6:seg = 8'h82;                //显示6
        4'h7:seg = 8'hf8;                //显示7
        4'h8:seg = 8'h80;                //显示8
        4'h9:seg = 8'h90;                //显示9
        4'ha:seg = 8'h88;                //显示a
        4'hb:seg = 8'h83;                //显示b
        4'hc:seg = 8'hc6;                //显示c
        4'hd:seg = 8'ha1;                //显示d
        4'he:seg = 8'h86;                //显示e
        4'hf:seg = 8'h8e;                //显示f
    endcase
end

endmodule
此帖出自FPGA/CPLD论坛

最新回复

恩。个人习惯吧,养成自己的模式难啊  详情 回复 发表于 2013-7-31 23:06

点评

谢谢了,不过我一般比较习惯将模块分离,使用元件例化,这样子顶层文件更加简洁:pleased:  详情 回复 发表于 2013-7-31 22:00
点赞 关注(1)
 

回复
举报

648

帖子

2

TA的资源

纯净的硅(高级)

沙发
 

回复 楼主白丁 的帖子

谢谢了,不过我一般比较习惯将模块分离,使用元件例化,这样子顶层文件更加简洁
此帖出自FPGA/CPLD论坛

点评

这个是书上的例子,单讲uart足够了  详情 回复 发表于 2013-7-31 23:02
 
 

回复

6423

帖子

17

TA的资源

版主

板凳
 

回复 沙发philips_lu 的帖子

这个是书上的例子,单讲uart足够了
此帖出自FPGA/CPLD论坛

点评

恩。个人习惯吧,养成自己的模式难啊  详情 回复 发表于 2013-7-31 23:06
 
 
 

回复

648

帖子

2

TA的资源

纯净的硅(高级)

4
 

回复 板凳白丁 的帖子

恩。个人习惯吧,养成自己的模式难啊
此帖出自FPGA/CPLD论坛

点评

还是遵循规范比较好,自己的模式别人不一定能接受啊  详情 回复 发表于 2013-7-31 23:17
 
 
 

回复

6423

帖子

17

TA的资源

版主

5
 

回复 4楼philips_lu 的帖子

还是遵循规范比较好,自己的模式别人不一定能接受啊
此帖出自FPGA/CPLD论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表