完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
这个程序是用串口发送一个指定的8位数据给pc,用quartus编译没问题,但是下到板子里并不能实现用modelsim仿真时,说是 end_cnt1 add_cnt1 add_cnt0 end_cnt0 出了问题, 是不是这种赋值方式不对?
module uart(clk , rst_n , key, txd, tx_done ); //参数定义 parameter DATA_W = 8; //输入信号定义 input clk ; input rst_n ; input key ; //input [2:0] baud_set; //输出信号定义 output txd ; output tx_done ; //输出信号reg定义 reg txd ; reg tx_done ; //中间信号定义 wire [13:0] bps_cnt ; reg [13:0] cnt0 ; reg [2:0 ] cnt1 ; wire [9:0] tx_data ; reg flag ; wire [7:0] dout ; assign dout = 8'h12; assign bps_cnt=5208; /* //组合逻辑写法 always@(*)begin case(baud_set) 1: bps_cnt <= 5208; // baud=9600 2: bps_cnt <= 2604; // 19200 3: bps_cnt <= 1302; // 38400 4: bps_cnt <= 868 ; // 57600 5: bps_cnt <= 434 ; // 115200 endcase end */ // flag always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin flag<=0; end else if (key==0)begin flag <= 1; end else if (end_cnt1) begin flag <= 0; end end //时序逻辑写法 cnt0 分频时钟 always @(posedge clk or negedge rst_n)begin if(!rst_n)begin cnt0 <= 0; end else if(add_cnt0)begin if(end_cnt0) cnt0 <= 0; else cnt0 <= cnt0 + 1; end end assign add_cnt0 = flag==1; assign end_cnt0 = add_cnt0 && cnt0==bps_cnt-1 ; // 时序 cnt1 数10次 always @(posedge clk or negedge rst_n)begin if(!rst_n)begin cnt1 <= 0; end else if(add_cnt1)begin if(end_cnt1) cnt1 <= 0; else cnt1 <= cnt1 + 1; end end assign add_cnt1 = end_cnt0 ; assign end_cnt1 = add_cnt1 && cnt1==9 ; assign tx_data={1'b1,dout,1'b0}; // 时序 dout always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin txd <= 1'b1; end else if (end_cnt0)begin txd <= tx_data[cnt1]; end end // 时序 tx_done always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin tx_done <= 0; end else if(end_cnt1) begin tx_done <= 1; end else begin tx_done <= 0; end end endmodule 补充内容 (2017-8-15 21:49): 目前仿真可以通过 但是还是串口调试助手还是没数据 求解答啊 弄不出来今晚都睡不着了 |
|
相关推荐
9个回答
|
|
always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin txd <= 1'b1; end //else if (end_cnt0)begin else if (cnt0 == 1)begin txd <= tx_data[cnt1]; end end 看错 我以为你的bps_cnt为波特率的计数子, 另外 你的cnt1是bit计数吧 ? 需要计数到9. 但是你的cnt1只有3bit的位宽 。 需要改为reg [3:0] cnt1;
最佳答案
|
|
|
|
仿真出错是 end_cnt1 add_cnt1 add_cnt0 end_cnt0这几个信号没预先定义
|
|
|
|
嗯嗯 但是定义了之后下载板子还是没有 我现在再看看仿真波形找找错误 |
|
|
|
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin txd <= 1'b1; end else if (end_cnt0)begin txd <= tx_data[cnt1]; end end 这里的end_cnt0 在bps_cnt==5207才有效。 应该要在bps_cnt==1时候就把tx_data[0]取进来。 |
|
|
|
这两个的波特率不是都是 一样的吗 ,都是间隔 5208个cnt0 送一个数, 我改过之后还是不行 。。 |
|
|
|
可以用嵌入式逻辑分析仪看下时序对不对
|
|
|
|
|
|
|
|
问题解决了吗?选个最佳答案吧
|
|
|
|
昨天学校停电了 ,今天才看到 这个我试了 还是不行 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1779 浏览 1 评论
1518 浏览 0 评论
矩阵4x4个按键,如何把识别结果按编号01-16(十进制)显示在两个七段数码管上?
1735 浏览 0 评论
954 浏览 0 评论
2525 浏览 0 评论
1571 浏览 39 评论
5804 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 20:52 , Processed in 0.680967 second(s), Total 89, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号