网上看的串口自发自收的代码有点疑问,感觉是小问题,帮看下

2019-03-25 10:44发布

(顶层模块):
module my_uart_top(clk,rst_n,rs232_rx,rs232_tx);

input clk;
// 50MHz
主时钟
input rst_n;
//
低电平复位信号
input rs232_rx;
// RS232
接收数据信号
output rs232_tx;
//
RS232
发送数据信号

wire bps_start;
//
接收到数据后,波特率时钟启动信号置位
wire clk_bps;
// clk_bps
的高电平为接收或者发送数据位的中间采样点
wire[7:0] rx_data;
//
接收数据寄存器,保存直至下一个数据来到
wire rx_int;
//
接收数据中断信号,接收到数据期间始终为高电平
//----------------------------------------------------
speed_select
speed_select(
.clk(clk),
//
波特率选择模块,接收和发送模块复用,不支持全双工通信

.rst_n(rst_n),


.bps_start(bps_start),


.clk_bps(clk_bps)


);


my_uart_rx
my_uart_rx(
.clk(clk),
//
接收数据模块

.rst_n(rst_n),


.rs232_rx(rs232_rx),


.clk_bps(clk_bps),


.bps_start(bps_start),


.rx_data(rx_data),


.rx_int(rx_int)


);


my_uart_tx
my_uart_tx(
.clk(clk),
//
发送数据模块

.rst_n(rst_n),


.clk_bps(clk_bps),


.rx_data(rx_data),


.rx_int(rx_int),


.rs232_tx(rs232_tx),


.bps_start(bps_start)


);


endmodule


module speed_select(clk,rst_n,bps_start,clk_bps);

input clk;
// 50MHz
主时钟
input rst_n;
//
低电平复位信号
input bps_start;
//
接收到数据后,波特率时钟启动信号置位
output clk_bps;
// clk_bps
的高电平为接收或者发送数据位的中间采样点

parameter
bps9600
= 5207,
//
波特率为9600bps



bps19200
= 2603,
//
波特率为19200bps

bps38400
= 1301,
//
波特率为38400bps

bps57600
= 867,
//
波特率为57600bps

bps115200
= 433;
//
波特率为115200bps

parameter
bps9600_2
= 2603,


bps19200_2
= 1301,


bps38400_2
= 650,


bps57600_2
= 433,


bps115200_2 = 216;


reg[12:0] bps_para;
//
分频计数最大值
reg[12:0] bps_para_2;
//
分频计数的一半
reg[12:0] cnt;
//
分频计数
reg clk_bps_r;
//
波特率时钟寄存器

//----------------------------------------------------------
reg[2:0] uart_ctrl;
// uart
波特率选择寄存器
//----------------------------------------------------------
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
lixinsir
1楼-- · 2019-03-25 11:39
 精彩回答 2  元偷偷看……
lixinsir
2楼-- · 2019-03-25 14:17
怎么大家不屑于回答这种问题啊???
wenhuawu
3楼-- · 2019-03-25 17:42
加粗部分应该是对的,正因为程序是并行执行的,所以每次只能实现一个传值,即值是从上到下依次传递的,根据程序注释也说了这个部分是滤波部分!
HDLWorld
4楼-- · 2019-03-25 21:47
有测试向量的话也一起贴出来。  加粗部分综合后是3个寄存器。 所以,估计是你的测试向量有问题。
lixinsir
5楼-- · 2019-03-25 22:04
你的意思是加粗部分要在3个clk才能完成赋值是么?
但是assign neg_rx_int =  ~rx_int1 & rx_int2;  //捕捉到下降沿后,neg_rx_int拉地保持一个主时钟周期
在第三个时钟rising的时候,int1和int2 的值一致,但~的优先级高,rx_int好性不能被拉高啊?
麻烦了
zhjzh72_2004
6楼-- · 2019-03-26 00:24
看来        差距     不是一时半会   就追上的

一周热门 更多>