ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:18.12KB ,
资源ID:29464151      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29464151.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(流水灯试验.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

流水灯试验.docx

1、流水灯试验/流水灯试验,分频计数器选得大些,否则显示不出流水灯的 效果module ledwater (clk_50M,rst,dataout);input clk_50M,rst;output 5:0 dataout;reg 5:0 dataout;reg 24:0 count; /分频计数器/分频计数器always ( posedge clk_50M ) begin count=count+1; end/ 经仿真知:循环一次大约90毫秒左右,而每个间隔之间大约10毫秒always ( posedge clk_50M or negedge rst) begin case ( count24:

2、21 ) 0: dataout=6b11_1110; 1: dataout=6b11_1100; 2: dataout=6b11_1000; 3: dataout=6b11_0000; 4: dataout=6b10_0000; 5: dataout=6b00_0000; /循环 6: dataout=6b01_1111; /倒回来 7: dataout=6b00_1111; 8: dataout=6b00_0111; 9: dataout=6b00_0011; 10: dataout=6b00_0001; 11: dataout=6b00_0000; endcase endendmodule

3、段数码管测试实验:以动态扫描方式在位数码管“同时”显示-7实验的目的是向用户介绍多个数码管动态显示的方法。动态显示的方法是,按一定的频率轮流向各个数码管的COM端送出低电平,同时送出对应的数据给各段。*/module seg71(clk,rst,dataout,en);input clk,rst;output7:0 dataout;output7:0 en;/COM使能输出reg7:0 dataout;/各段数据输出reg7:0 en;reg15:0 cnt_scan;/扫描频率计数器reg4:0 dataout_buf;always(posedge clk or negedge rst)be

4、gin if(!rst) begin cnt_scan=0; end else begin cnt_scan=cnt_scan+1; endendalways (cnt_scan)begin case(cnt_scan15:13) 3b000 : en = 8b1111_1110; 3b001 : en = 8b1111_1101; 3b010 : en = 8b1111_1011; 3b011 : en = 8b1111_0111; 3b100 : en = 8b1110_1111; 3b101 : en = 8b1101_1111; 3b110 : en = 8b1011_1111; 3b

5、111 : en = 8b0111_1111; default : en = 8b1111_1110; endcaseendalways(en) /对应COM信号给出各段数据begin case(en) 8b1111_1110: dataout_buf=0; 8b1111_1101: dataout_buf=1; 8b1111_1011: dataout_buf=2; 8b1111_0111: dataout_buf=3; 8b1110_1111: dataout_buf=4; 8b1101_1111: dataout_buf=5; 8b1011_1111: dataout_buf=6; 8b

6、0111_1111: dataout_buf=7; default: dataout_buf=8; endcaseendalways(dataout_buf)begin case(dataout_buf) 4b0000: dataout=8b0000_0011; 4b0001: dataout=8b1001_1111; 4b0010: dataout=8b0010_0101; 4b0011: dataout=8b0000_1101; 4b0100: dataout=8b1001_1001; 4b0101: dataout=8b0100_1001; 4b0110: dataout=8b0100_

7、0001; 4b0111: dataout=8b0001_1111; 4b1000: dataout=8b0000_0001; 4b1001: dataout=8b0001_1001; 4b1010: dataout=8b0001_0001; 4b1011: dataout=8b1100_0001; 4b1100: dataout=8b0110_0011; 4b1101: dataout=8b1000_0101; 4b1110: dataout=8b0110_0001; 4b1111: dataout=8b0111_0001; endcaseendendmodule 本模块的功能是验证实现和P

8、C机进行基本的串口通信的功能。需要在PC机上安装一个串口调试工具来验证程序的功能。程序实现了一个收发一帧10个bit(即无奇偶校验位)的串口控制器,10个bit是1位起始位,8个数据位,1个结束位。串口的波特律由程序中定义的div_par参数决定,更改该参数可以实现相应的波特率。程序当前设定的div_par 的值是0x145,对应的波特率是9600。用一个8倍波特率的时钟将发送或接受每一位bit的周期时间划分为8个时隙以使通信同步.程序的基本工作过程是,按动一个按键key1 控制器向PC的串口发送“welcome,PC机接收后显示验证数据是否正确(串口调试工具设成按ASCII码接受方式).PC

9、可随时向CPLD发送0-F的十六进制数据,CPLD接受后显示在7段数码管上.*/module serial(clk,rst,rxd,txd,en,seg_data,key_input,lowbit);input clk,rst;input rxd;/串行数据接收端input key_input;/按键输入output7:0 en;output7:0 seg_data;reg7:0 seg_data;output txd;/串行数据发送端output lowbit;/inner reg/reg15:0 div_reg;/分频计数器,分频值由波特率决定。分频后得到频率8倍波特率的时钟reg2:0

10、div8_tras_reg;/该寄存器的计数值对应发送时当前位于的时隙数reg2:0 div8_rec_reg;/该寄存器的计数值对应接收时当前位于的时隙数reg3:0 state_tras;/发送状态寄存器reg3:0 state_rec;/接受状态寄存器reg clkbaud_tras;/以波特率为频率的发送使能信号reg clkbaud_rec;/以波特率为频率的接受使能信号reg clkbaud8x;/以8倍波特率为频率的时钟,它的作用是将发送或接受一个bit的时钟周期分为8个时隙reg recstart;/开始发送标志reg recstart_tmp;reg trasstart;/开

11、始接受标志reg rxd_reg1;/接收寄存器1reg rxd_reg2;/接收寄存器2,因为接收数据为异步信号,故用两级缓存reg txd_reg;/发送寄存器reg7:0 rxd_buf;/接受数据缓存reg7:0 txd_buf;/发送数据缓存reg2:0 send_state;/每次按键给PC发送Welcome字符串,这是发送状态寄存器reg19:0 cnt_delay;/延时去抖计数器reg start_delaycnt;/开始延时计数标志reg key_entry1,key_entry2;/确定有键按下标志/parameter div_par=16h145;/分频参数,其值由对应

12、的波特率计算而得,按此参数分频的时钟频率是波倍特率的8 /倍,此处值对应9600的波特率,即分频出的时钟频率是9600*8 (CLK 50M)/assign txd=txd_reg;assign lowbit=0;assign en=0;/7段数码管使能信号赋值always(posedge clk )begin if(!rst) begin cnt_delay=0; start_delaycnt=0; end else if(start_delaycnt) begin if(cnt_delay!=20d800000) begin cnt_delay=cnt_delay+1; end else

13、begin cnt_delay=0; start_delaycnt=0; end end else begin if(!key_input&cnt_delay=0) start_delaycnt=1; endendalways(posedge clk)begin if(!rst) key_entry1=0; else begin if(key_entry2) key_entry1=0; else if(cnt_delay=20d800000) begin if(!key_input) key_entry1=1; end endendalways(posedge clk )begin if(!r

14、st) div_reg=0; else begin if(div_reg=div_par-1) div_reg=0; else div_reg=div_reg+1; endendalways(posedge clk)/分频得到8倍波特率的时钟begin if(!rst) clkbaud8x=0; else if(div_reg=div_par-1) clkbaud8x=clkbaud8x;endalways(posedge clkbaud8x or negedge rst)begin if(!rst) div8_rec_reg=0; else if(recstart)/接收开始标志 div8_

15、rec_reg=div8_rec_reg+1;/接收开始后,时隙数在8倍波特率的时钟下加1循环endalways(posedge clkbaud8x or negedge rst)begin if(!rst) div8_tras_reg=0; else if(trasstart) div8_tras_reg=div8_tras_reg+1;/发送开始后,时隙数在8倍波特率的时钟下加1循环endalways(div8_rec_reg)begin if(div8_rec_reg=7) clkbaud_rec=1;/在第7个时隙,接收使能信号有效,将数据打入 else clkbaud_rec=0;e

16、ndalways(div8_tras_reg)begin if(div8_tras_reg=7) clkbaud_tras=1;/在第7个时隙,发送使能信号有效,将数据发出 else clkbaud_tras=0;endalways(posedge clkbaud8x or negedge rst)begin if(!rst) begin txd_reg=1; trasstart=0; txd_buf=0; state_tras=0; send_state=0; key_entry2=0; end else begin if(!key_entry2) begin if(key_entry1)

17、begin key_entry2=1; txd_buf=8d119; /w end end else begin case(state_tras) 4b0000: begin /发送起始位 if(!trasstart&send_state7) trasstart=1; else if(send_state7) begin if(clkbaud_tras) begin txd_reg=0; state_tras=state_tras+1; end end else begin key_entry2=0; state_tras=0; end end 4b0001: begin /发送第1位 if(

18、clkbaud_tras) begin txd_reg=txd_buf0; txd_buf6:0=txd_buf7:1; state_tras=state_tras+1; end end 4b0010: begin /发送第2位 if(clkbaud_tras) begin txd_reg=txd_buf0; txd_buf6:0=txd_buf7:1; state_tras=state_tras+1; end end 4b0011: begin /发送第3位 if(clkbaud_tras) begin txd_reg=txd_buf0; txd_buf6:0=txd_buf7:1; sta

19、te_tras=state_tras+1; end end 4b0100: begin /发送第4位 if(clkbaud_tras) begin txd_reg=txd_buf0; txd_buf6:0=txd_buf7:1; state_tras=state_tras+1; end end 4b0101: begin /发送第5位 if(clkbaud_tras) begin txd_reg=txd_buf0; txd_buf6:0=txd_buf7:1; state_tras=state_tras+1; end end 4b0110: begin /发送第6位 if(clkbaud_tr

20、as) begin txd_reg=txd_buf0; txd_buf6:0=txd_buf7:1; state_tras=state_tras+1; end end 4b0111: begin /发送第7位 if(clkbaud_tras) begin txd_reg=txd_buf0; txd_buf6:0=txd_buf7:1; state_tras=state_tras+1; end end 4b1000: begin /发送第8位 if(clkbaud_tras) begin txd_reg=txd_buf0; txd_buf6:0=txd_buf7:1; state_tras=st

21、ate_tras+1; end end 4b1001: begin /发送停止位 if(clkbaud_tras) begin txd_reg=1; txd_buf=8h55; state_tras=state_tras+1; end end 4b1111:begin if(clkbaud_tras) begin state_tras=state_tras+1; send_state=send_state+1; trasstart=0; case(send_state) 3b000: txd_buf=8d101;/e 3b001: txd_buf=8d108;/l 3b010: txd_buf

22、=8d99;/c 3b011: txd_buf=8d111;/o 3b100: txd_buf=8d109;/m 3b101: txd_buf=8d101;/e default: txd_buf=0; endcase end end default: begin if(clkbaud_tras) begin state_tras=state_tras+1; trasstart=1; end end endcase end endendalways(posedge clkbaud8x or negedge rst)/接受PC机的数据begin if(!rst) begin rxd_reg1=0;

23、 rxd_reg2=0; rxd_buf=0; state_rec=0; recstart=0; recstart_tmp=0; end else begin rxd_reg1=rxd; rxd_reg2=rxd_reg1; if(state_rec=0) begin if(recstart_tmp=1) begin recstart=1; recstart_tmp=0; state_rec=state_rec+1; end else if(!rxd_reg1&rxd_reg2) /检测到起始位的下降沿,进入接受状态 recstart_tmp=1&state_rec=8) begin if(c

24、lkbaud_rec) begin rxd_buf7=rxd_reg2; rxd_buf6:0=rxd_buf7:1; state_rec=state_rec+1; end end else if(state_rec=9) begin if(clkbaud_rec) begin state_rec=0; recstart=0; end end endendalways(rxd_buf) /将接受的数据用数码管显示出来begin case (rxd_buf) 8h30: seg_data=8b11000000; 8h31: seg_data=8b11111001; 8h32: seg_data=

25、8b10100100; 8h33: seg_data=8b10110000; 8h34: seg_data=8b10011001; 8h35: seg_data=8b10010010; 8h36: seg_data=8b10000010; 8h37: seg_data=8b11111000; 8h38: seg_data=8b10000000; 8h39: seg_data=8b10010000; 8h41: seg_data=8b00010001; 8h42: seg_data=8b11000001; 8h43: seg_data=8b0110_0011; 8h44: seg_data=8b1000_0101; 8h45: seg_data=8b0110_0001; 8h46: seg_data=8b0111_0001; default: seg_data=8b1111_1111; endcaseend endmodule

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1