5003|6

6

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

一个串口发送的verilog程序,运行结果很奇怪 [复制链接]

always @ (posedge txclk or posedge ld_tx_data or negedge reset)

if(!reset)
begin
        tx_reg      <=0;
        tx_over_run <=0;
        tx_empty        <=1;
        tx_cnt                <=0;
        tx_out                <=1;
end  
else if (ld_tx_data)
        begin     
                                  if (!tx_empty)
                begin
                        tx_over_run <= 1;
                end
                else
                        begin
                        tx_reg   <= tx_data;       //tx_data is put in tx_reg
                        tx_empty = 0;                           
                        end
        end
else begin
   if (tx_enable && !tx_empty) begin
     tx_cnt <= tx_cnt + 1;
     if (tx_cnt == 0) begin
       tx_out <= 0;                                                        //the start bit
     end
     if (tx_cnt > 0 && tx_cnt < 9) begin      //transport bit1-bit8
        tx_out <= tx_reg[tx_cnt -1];
     end
     if (tx_cnt == 9) begin               //when cnt=9,transport over.tx_out is set 1;
       tx_out <= 1;
       tx_cnt <= 0;
       tx_empty <= 1;                                         //when cnt=9,transport over,tx_empty is set 1,means the data in FIFO is transportant over                        
     end
   end
   if (!tx_enable) begin
     tx_cnt <= 0;
        end        
end


txclk            是串口发送波特率
tx_data        是DSP的低8位并行数据,即要通过串口发送出去的数据
ld_tx_data    是DSP的数据有效信号,为一个短时的脉冲。。。当ld_tx_data上升沿后,tx_data数据出现在DSP的数据线
reset            是复位信号

运行后用逻辑分析仪看结果,在ld_tx_data上的上升沿tx_empty和tx_over_run同时变化??难以理解。tx_empty从1变0,而同时tx_over_run从0变为1.。。。。。

tx_reg一直为0,不能把数据线的tx_data赋给tx_reg,串口发送数据00,而不是tx_data

[ 本帖最后由 nksosoon 于 2012-8-24 20:03 编辑 ]

三个敏感电平奇怪问题.jpg (125.23 KB, 下载次数: 0)

三个敏感电平奇怪问题.jpg
此帖出自FPGA/CPLD论坛

最新回复

本地时钟就是 板子上所有系统时钟。双口RAM就是有读写两个时钟。这两个时钟可以同源时钟。也可以是不同源时钟。 所以双口RAM可以用来做异步时钟同步。  详情 回复 发表于 2012-8-29 22:21
点赞 关注
 

回复
举报

6892

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 
你提出问题不奇怪。

是你设计程序就是这个结果。串口发送这个程序很简单的。但是从你设计程序上看,搞的复杂的很!
此帖出自FPGA/CPLD论坛

点评

版主,你好。看到你发的这篇贴子,我用这个程序就是你这个一样的。。。。 https://bbs.eeworld.com.cn/viewthread.php?tid=241529&extra=&page=1 只是我发现我的控制芯片(DSP)的 ld_tx_data只是一个短脉冲,时  详情 回复 发表于 2012-8-25 10:51
在ld_tx_data上的上升沿tx_empty和tx_over_run同时变化??难以理解。tx_empty从1变0,而同时tx_over_run从0变为1.。。。。。 怎么会出现这样的结果呢??下面这段程序,应该是tx_empty为1的时候,执行tx_reg  详情 回复 发表于 2012-8-25 10:25
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 eeleader 的帖子

在ld_tx_data上的上升沿tx_empty和tx_over_run同时变化??难以理解。tx_empty从1变0,而同时tx_over_run从0变为1.。。。。。

怎么会出现这样的结果呢??下面这段程序,应该是tx_empty为1的时候,执行tx_reg<=tx_data和tx_tempty<=0吧。。。。。。。为什么tx_over_run也会被置1呢
   if (ld_tx_data)
          begin     
                if (!tx_empty)
                begin
                        tx_over_run <= 1;
                end
                else
                        begin
                        tx_reg   <= tx_data;       //tx_data is put in tx_reg
                        tx_empty <= 0;                           
                        end
        end

我下进FPGA里面,从运行结果来看。似乎在ld_tx_data=1期间,上面这一段程序重复运行了很多次,但是always @()的边沿敏感信号里,没有这么一个高频信号来驱动这段程序重复运行啊。。。。

[ 本帖最后由 nksosoon 于 2012-8-25 10:35 编辑 ]
此帖出自FPGA/CPLD论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 沙发 eeleader 的帖子

版主,你好。看到你发的这篇贴子,我用这个程序就是你这个一样的。。。。
https://bbs.eeworld.com.cn/viewt ... 41529&extra=&page=1

只是我发现我的控制芯片(DSP)的  ld_tx_data只是一个短脉冲,时间太短,用tx_clk来采样,会采不到这个信号,出现有时发送丢失的情况(比如ld_tx_data没出现在tx_clk的上升沿)。。。。 。。。所以我想在always里加一个@posedge ld_tx_data,但是出现了上面的问题
此帖出自FPGA/CPLD论坛
 
 
 

回复

6892

帖子

0

TA的资源

五彩晶圆(高级)

5
 
这个是异步信号控制问题。
针对异步信号控制问题,第一步用本地时钟多次同步,避免亚稳态传递。
对低速采集高速信号,除了用双口RAM异步缓冲,没用啥比较好的方法。
此帖出自FPGA/CPLD论坛

点评

不是很懂。什么是 本地时钟多次同步 和 双口RAM异步缓冲。。。。能简单说下吗?  详情 回复 发表于 2012-8-29 09:35
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复 5楼 eeleader 的帖子

不是很懂。什么是 本地时钟多次同步 和 双口RAM异步缓冲。。。。能简单说下吗?
此帖出自FPGA/CPLD论坛
 
 
 

回复

6892

帖子

0

TA的资源

五彩晶圆(高级)

7
 
本地时钟就是 板子上所有系统时钟。双口RAM就是有读写两个时钟。这两个时钟可以同源时钟。也可以是不同源时钟。
所以双口RAM可以用来做异步时钟同步。
此帖出自FPGA/CPLD论坛
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表