rs232设计报告和verilog代码,含testbench,可以直接运行

上传人:第*** 文档编号:31317618 上传时间:2018-02-06 格式:DOCX 页数:20 大小:167.80KB
返回 下载 相关 举报
rs232设计报告和verilog代码,含testbench,可以直接运行_第1页
第1页 / 共20页
rs232设计报告和verilog代码,含testbench,可以直接运行_第2页
第2页 / 共20页
rs232设计报告和verilog代码,含testbench,可以直接运行_第3页
第3页 / 共20页
rs232设计报告和verilog代码,含testbench,可以直接运行_第4页
第4页 / 共20页
rs232设计报告和verilog代码,含testbench,可以直接运行_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《rs232设计报告和verilog代码,含testbench,可以直接运行》由会员分享,可在线阅读,更多相关《rs232设计报告和verilog代码,含testbench,可以直接运行(20页珍藏版)》请在金锄头文库上搜索。

1、RS232接口数据转发协议实验报告1.设计要求设计 RS232 接口数据转发协议,将 8 位并行数据转发为 RS232协议的串口数据发送出去。entity rs232port ( clk: in std_logic; - 16MHz 输入时钟rdy: in std_logic; -数据准备好信号, 1 个时钟周期的正脉冲data: in std_logic_vector(7 downto 0); -要发送的并行数据bps: in std_logic_vector(1 downto 0); -波特率设置- 00:4800bps 01:9600 10:19200 11:38400parity :

2、in std_logic; -奇偶校验控制,0:奇校验 1:偶校验d_out: out std_logic); -串行数据输出end rs232;协议要求: (1)波特率:4800/ 9600/19200/38400 可选(2)8 位数据位,1 位停止位,偶校验可选设计要求:(1)采用 VHDL 或 Verilog 语言设计上述电路;(2)写出测试激励文件,并仿真;(3)分析仿真结果,并撰写设计报告.(4)提交完整的纸质设计报告并附源代码.2.接口协议要求一个字符一个字符传输,每传一个字符总是以起始位开始,以停止位结束,字符之间没有固定时间间隔要求。波特率可在4800、9600、19200、3

3、8400 中选择。每一个字符前面都有一位起始位(低电平) ,字符本身有 5-7 位数据位,接着是一位校验位,最后是一位停止位。停止位和空闲位规定必须为高电平3.系统结构分析本设计采用自顶向下的分析方法,结合端口要求和协议要求,将设计分为顶层模块和底层模块。顶层模块框图如下:底层模块主要又包含两个部分,时钟分频和串行输出。时钟分频模块结构图如下:串行输出模块结构图如下:顶层模块和底层模块的关系如下:4.实验结果分析在使用 verilog HDL 实现各模块的过程中,采用自底向上的实现方法,将各个模块逐一实现后进行编译、仿真。编译结果如下: 时钟分频模块仿真结果如下:串行输出模块仿真结果如下: 顶

4、层模块仿真结果如下:虽然在全队的努力之下基本实现了设计要求,但是由于能力的有限,设计仍有很多不足之处,为未来更进一步的优化指明方向。1.时钟频率不够精确,如果需要十分精确的时钟频率,需要采用模拟锁相环电路使输入时钟扩大三倍,然后分频方能实现。2.设计实现依赖于前级,要求本级数据发送完成且 finish 信号高电平有效之后才能再次使 rdy 信号有效。3.如若后级发现数据有错,无法实现数据重发的功能。4.在测试平台的编写过程中,只是随机地选取了两组数据进行验证,未能实现所有输入数据的覆盖。实验 verilog代码:module clk_select(rst,clk_in,bps,clk_out)

5、;input rst,clk_in;input 1:0bps;output reg clk_out;reg 11:0 cnt;reg 11:0 cnt_end;always(bps or rst)beginif(rst) clk_out=4b1011)?4b1011:count+1; always(posedge clk ) if (parity_select) verify=(data_in0+data_in1+data_in2+data_in3+data_in4+data_in5+data_in6+data_in7);else if (!parity_select) verify=!(da

6、ta_in0+data_in1+data_in2+data_in3+data_in4+data_in5+data_in6+data_in7);always(posedge clk or negedge rst or posedge rdy)if (!rst) begin data_out=1; finish=0; endelse if (rdy=0) case(count)4b0000 : data_out=1;4b0001 : data_out=0;4b0010 : data_out=data_in0; 4b0011 : data_out=data_in1; 4b0100 : data_ou

7、t=data_in2; 4b0101 : data_out=data_in3;4b0110 : data_out=data_in4;4b0111 : data_out=data_in5;4b1000 : data_out=data_in6; 4b1001 : data_out=data_in7;4b1010 : data_out=verify;4b1011 : begin data_out=1; finish=1; enddefault : data_out=1; endcasealways(posedge count)if(4b0001=count=4b1010) finish=0;else

8、 if (count=0) finish=1;endmodule module serial_output_testbench;reg clk,rst,rdy,output_enable,parity_select;reg 7:0 data_in;wire data_out,finish;initialbegin$monitor (data_out=%b,data_out);endinitialbegin#0 rst=1b0;rdy=1b0;output_enable=1b0;data_in=8b00011010;parity_select=0;#20 rst=1b1;rdy=1b1;outp

9、ut_enable=1b1;parity_select=1;#50 rdy=1b0; #400 rdy=1b1;data_in=8b00111010;parity_select=0; #50 rdy=1b0;endinitialbegin#0 clk=1b0;forever #10 clk=clk;endserial_output inst1 (.clk(clk),.rst(rst),.data_in(data_in),.rdy(rdy),.output_enable(output_enable),.parity_select(parity_select),.finish(finish),.d

10、ata_out(data_out);endmoduleModulers232_top(rst,clk,rdy,data_in,bps,parity,data_out,output_enable,finish);input clk,rst,rdy,parity,output_enable;input 1:0 bps;input 7:0 data_in;output data_out,finish;wire clk_trans;clk_select inst1(.clk_in(clk),.rst(rst),.bps(bps),.clk_out(clk_trans);serial_output in

11、st2(.clk(clk_trans), .rst(rst),.data_in(data_in),.rdy(rdy),.output_enable(output_enable),.parity_select(parity),.finish(finish),.data_out(data_out);endmodulemodule rs232_top_testbench;reg rst,clk,rdy,parity,output_enable;reg 7:0 data_in;reg 1:0 bps;wire finish,data_out;initialbegin$monitor (data_out

12、=%b,finish=%b,data_out,finish);endinitialbegin#0 rst=1b0;rdy=1b0;output_enable=1b0;parity=1b0;data_in=8b01101101;bps=2b00;#10000 rst=1b1;bps=2b11;rdy=1b1;parity=1b1;output_enable=1b1;#50 rdy=1b0;#100000 bps=2b01; rdy=1b1;parity=1b0;output_enable=1b1;data_in=8b00110100;#50 rdy=1b0; endinitialbegin#0 clk=1b0;forever#5 clk=clk;endrs232_top inst3(.rst(rst),.clk(clk),.rdy(rdy),.parity(parity),.bps(bps),.data_out(data_out),.data_in(data_in),.output_enable(output_enable),.finish(finish);endmodule

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号