uart设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微电子学院电子科学与技术
刘源1120162371 11111601
时间:2018年7月
UART串口模块设计
一.设计要求
1.uart模块由tx发送部分和rx接受部分两部分以及对应的时钟分频模块构
成。
2.按照如图数据流,tx将8bit并行数据转为串行数据发送至rx模块,rx模
块接收后校验并8bit并行输出。tx要有对应的状态标志位(如:ready,buzy),rx要有校验标志(如:error)。
3.要求8bit并行数据和uart串行数据的带宽均为9600bps,rx接收模块要求
以16倍频重采样接收。
4.Uart数据格式:1位起始位,8位数据位,先发高位,后发低位,1位偶
校验,1位停止位。
二、仿真要求
1.编写testbench进行仿真。
2.通过读文件的方式,在仿真中输入多组(三组以上)数据。
3.观察uart串口数据及接收数据。
三、设计过程
设计问题列表:
实现过程问题列表:
仿真问题列表:
结果:
期望传输的数据:
波形结果:
data:将mem储存到data。
wrsig:标志数据读入tx模块的结束。
mem:希望传输的数据。
i:mem的地址。
j:指示读入数据的结束。
send:指示uarttx模块处于并行转串行状态。
datain:数据输入到uarttx中了。
tx:uarttx输出的串行数据。
Idle:指示uarttx模块是否在工作。
Presult:校验码。
rx:uartrx接受的串行数据。
dataout:最终输出的并行数据结果。(将data的毛刺波形进行了消除)data:uartrx输出的并行数据。
rdsig:指示上个数据发送结束。
dataerror:校验码检验结果。
frameerro:帧检验结果。
receive:指示uartrx处于工作状态。
presult:根据接受到的rx得出的校验码结果。
Debug:
由于我对软件和语法不是很熟,在编的过程中很多报错信息没有心情截图保留,一心只想快点解决问题,再加上问题一个接一个,完全没有考虑好好记录下报错信息。但当我认真的把一个个错误都解决了、搞懂了,我发现大部分错误都是我不熟悉语法和软件导致,熟悉了以后反而忘了当时是怎么搞错的。但我仍是总结了一些我自己以后需要注意的地方。
1.模块实例化时,要记得结束时加分号。
2.模块中要用的变量要在前面进行声明。
3.过程赋值只能在initial和always语句中进行。
4.If语句里不能嵌套always块。
5.要给给每个量赋初值,尤其是用到计数时。
6.从模块内部来看,模块的输入变量要用wire型,输出可以wire也可以reg。但从外部来看,输入给一个模块的变量可以是reg也可以是wire,但从模块里输出的只能是wire。
7.仿真模块的module括号里什么也不写,换句话说没有输入输出。在其中实例化顶层文件就可把激励发送给各模块。
8.读写函数的地址要用/隔开。
9.Memery型变量的地址可以用reg型变量来控制。
参考资料网址:
https:///view/4008d94aba1aa8114531d921
https:///course/UESTC-1002525007
https:///dreamdonghui/article/details/76343438
https:///sinat_25887055/article/details/52503180
https:///nkthinker/article/details/4255358
https:///a8039974/article/details/38796237
/article/201310/184677.html
https:///moon9999/article/details/69450912
/god_like_donkey/archive/2009/10/28/159119 2.html
https:///tianxingzhexxxx/article/details/40536857
https:///Times_poem/article/details/52036592
代码:
1.顶层模块
module uart(clk,data,wrsig); //顶层模块。
input clk;
input [7:0]data;
input wrsig;
clk_div a3(
.clk(clk),
.clkout(clkout)
);
uarttx a1(
.clk(clkout),
.datain(data),
.wrsig(wrsig),
.tx(tx),
.idle(idle)
);
uartrx a2(
.rx(tx),
.clk(clkout),
.rdsig(rdsig),
.dataout(dataout),
.dataerro(dataerro),
.frameerro(frameerro)
);
endmodule
2.时钟分频模块:
//我用的50MHZ频率时钟,为了9600波特率和16倍重采样,分频系数应该为326.