愚人节也是哥哥走的时候,所以这个节我不过。
因为EDN有字数限制,所以verilog不能在这里放出来,如果之后还是这样,我又嫌弃麻烦的时候,我可能就不在EDN更新了,所有的原创笔记会在豆瓣第一手更新。如果需要,可以移步豆瓣。【豆瓣ID】:西西在冰城。
-------------------------------------------------2016年3月31日 更新-------uart_tb--------------------------------------
uart_tb的写作要点:
1 defparam// 重定义模块内部参数
2 $readmemh("num.txt",a);//系统函数
3 task调用,
4 for语句,可综合,但是浪费资源
-------------------------------------------------2016年3月31日 更新--------tx_module---------------------------------------
tx_module:收到数据和有效信号,转换成帧
1 信号列表
输入
1 sclk
2 s_rst_n
3 pi_flag 输入数据和输入时钟在同一时间传入,切输入数据有效时长1个时钟周期,当此信号为高的时候,证明这个时候传入的num为有效数据。
4 pi_num
寄存器:
tx_flag 当pi_flag有效的时候,tx_flag拉高。当bit_cnt == 9 bit_flag = 1 拉低,即 数据传输完成
baut_cnt 当 tx_flag 拉高,开始计数,满5208 则清零重新计数
bit_cnt 每发送一个数据,加一
bit_flag 计数器baut_cnt 满 5208的时候,拉高一个周期
num_tmp 对输入数据的缓存
输出
5 po_tx 单位输出,为帧类型
-------------------------------------------------2016年3月31日 更新---------rx_module--------------------------------------
发现需要将笔记思路记录下来,否则都忘记自己当时写代码的思路了。还要养成写文档的好习惯
rx_module 收到帧,转换为8bit的数据
1 信号列表:
输入信号列表
1 sclk 系统时钟
2 s_rst_n 系统复位
3 rx 输入信号,为帧
内部寄存器列表
1 rx_tmp 对输入rx做一个时钟延时
2 rx_flag 当rx_tmp和rx不一致,则拉高。当帧数据传输完成则拉低
3 baut_cnt 保证一位数据宽度满足波特率9600;参数值为5208;
4 bit_flag 在baut_cnt 为 BAUT_CNT 一半的时候,将收到的数据传输给缓存
5 bit_cnt 收到一个数据,缓存一位的数值
输出信号列表
6 po_rx_flag 当接收完成的时候,输出一个时间单位的高电平,同时输出数据。当做输出数据有效的标志位
7 po_rx_data
用户402158 2016-4-1 14:04