- 1、本文档共21页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
RS232设计报告和verilog代码,含testbench,可以直接运行课案
RS232接口数据转发协议实验报告
设计要求
设计RS232接口数据转发协议,将8位并行数据转发为RS232协议的串口数据发送出去。
entity rs232
port ( 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:38400
parity : in std_logic; --奇偶校验控制,0:奇校验 1:偶校验
d_out: out std_logic); --串行数据输出
end rs232;
协议要求:
波特率:4800/ 9600/19200/38400可选
8位数据位,1位停止位,偶校验可选
设计要求:
(1)采用VHDL或Verilog语言设计上述电路;
(2)写出测试激励文件,并仿真;
(3)分析仿真结果,并撰写设计报告.
(4)提交完整的纸质设计报告并附源代码.
2.接口协议要求
一个字符一个字符传输,每传一个字符总是以起始位???始,以停止位结束,字符之间没有固定时间间隔要求。波特率可在4800、9600、19200、38400中选择。
每一个字符前面都有一位起始位(低电平),字符本身有5-7位数据位,接着是一位校验位,最后是一位停止位。停止位和空闲位规定必须为高电平
3.系统结构分析
本设计采用自顶向下的分析方法,结合端口要求和协议要求,将设计分为顶层模块和底层模块。
顶层模块框图如下:
底层模块主要又包含两个部分,时钟分频和串行输出。
时钟分频模块结构图如下:
串行输出模块结构图如下:
顶层模块和底层模块的关系如下:
4.实验结果分析
在使用verilog HDL实现各模块的过程中,采用自底向上的实现方法,将各个模块逐一实现后进行编译、仿真。
编译结果如下:
时钟分频模块仿真结果如下:
串行输出模块仿真结果如下:
顶层模块仿真结果如下:
虽然在全队的努力之下基本实现了设计要求,但是由于能力的有限,设计仍有很多不足之处,为未来更进一步的优化指明方向。
1.时钟频率不够精确,如果需要十分精确的时钟频率,需要采用模拟锁相环电路使输入时钟扩大三倍,然后分频方能实现。
2.设计实现依赖于前级,要求本级数据发送完成且finish信号高电平有效之后才能再次使rdy信号有效。
3.如若后级发现数据有错,无法实现数据重发的功能。
4.在测试平台的编写过程中,只是随机地选取了两组数据进行验证,未能实现所有输入数据的覆盖。
实验verilog代码:
module clk_select(rst,clk_in,bps,clk_out);
input rst,clk_in;
input [1:0]bps;
output reg clk_out;
reg [11:0] cnt;
reg [11:0] cnt_end;
always@(bps or rst)
begin
if(~rst) clk_out=0;
else case (bps)
2b00 : cnt_end=1666;
2b01 : cnt_end=833;
2b10 : cnt_end=416;
2b11 : cnt_end=208;
default : cnt_end=208;
endcase
end
always@(posedge clk_in or negedge rst)
begin
if(~rst) cnt=0;
else if(cnt==cnt_end) cnt=0;
else cnt=cnt+1;
end
always@(posedge clk_in or negedge rst)
begin
if(cnt==cnt_end) clk_out=~clk_out;
end
Endmodule
module clk_select_testbench;
reg rst,clk_in;
reg [1:0] bps;
wire clk_out;
initial
begin
$monitor (clk_out=%b,clk_out);
end
initial
begin
#0 rst=1b0;
#20 rst=1b1;
bps=2b11;
#200000 bps=2b00;
e
您可能关注的文档
最近下载
- 德国服装进口企业90个(带联系人、邮箱等详细信息).doc
- 云南作家协会入会申请表.doc
- 五年级上册数学试题-期末测试卷人教版(含答案).docx VIP
- 专题15 磁场-2020-2024年五年高考物理真题分类汇编(解析版).docx
- 2024年高考评析-新结构-新思想-新导向.pdf VIP
- 2024年全国各地中考语文名著阅读真题汇编(55题有解析有答).doc
- 时序器sh108产品检验报告.pdf VIP
- 储能行业研究框架:新能源周期核心品种,行业最具成长的主线之一.docx VIP
- 中信建投-电力设备行业每周观察-中东光储市场详细梳理.pdf VIP
- 全自动下卸料离心机PGZ1250说明书.pdf
文档评论(0)