3557|2

6892

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

寄存器输出出现数据不稳定! [复制链接]

将4位的输入 在时钟上升沿赋给输出寄存器,结果输出寄存器在数据稳定前 出现不该有的值!
我又在输出和输入之间加入了一级中间寄存器,输入给中间寄存器,中间寄存器在给输出,结果中间寄存器的数据稳定变化,输出端不稳定。在加中间寄存器后,结果类似:输出端不稳,中间寄存器稳定。我又把中间寄存器也作为输出,结果输出端和作为输出的中间寄存器输出都不稳定!

module count(data,data1,clk,rst);
   output [3:0] data;
   input  clk;
   input  rst;
   
   reg [3:0]  data;
   input [3:0]  data1;
   always@(posedge clk )
     if(rst==0)
       data<=1110;
     else
       data<=data1;
endmodule // count

中间加了一个寄存器data2后的代码:
module count(data,data1,clk,rst);
   output [3:0] data;
   input  clk;
   input  rst;
   
   reg [3:0]  data;
   input [3:0]  data1;
   reg [3:0]  data2;
   always@(posedge clk )
     if(rst==0)
       data2<=0;
     else
       data2<=data1;
   always@(posedge clk)
     data<=data2;
endmodule // count

加了中间寄存器data2 data3后的代码同时将data3作为输出的代码:

module count(data,data1,data3,clk,rst);
   output [3:0] data;
   input  clk;
   input  rst;
   
   reg [3:0]  data;
   input [3:0]  data1;
   reg [3:0]  data2;
   output reg [3:0] data3;
   always@(posedge clk )
     if(rst==0)
       data2<=1110;
     else
       data2<=data1;
   always@(posedge clk)
     data3<=data2;
   always@(posedge clk)
     data<=data3;
endmodule // count

 

testbench
`timescale 1ns/1ns
module count_test();
   wire [3:0] data;
   wire [3:0] data3;
   reg        rst;
   reg [3:0]  data1;
   
   reg        clk;
   count  M1(.data(data),.data3(data3),.data1(data1),.clk(clk),.rst(rst));
   initial #3000 $finish;
   initial
     begin
clk=0;
forever #20 clk=~clk;
     end
   initial
     begin
rst=1;
#10 rst=0;
#35 rst=1;
     end
   always@(posedge clk)
     data1<={$random}%16;
endmodule // count_test

此帖出自FPGA/CPLD论坛

最新回复

8.Found clock high time violation at 14.8 ns on register "|counter|lpm_counter:count1_rtl_0|dffs[11]" 原因:违反了steup/hold时间,应该是后仿真,看看波形设置是否和时钟沿符合steup/hold时间 措施:在中间加个寄存器可能可以解决问题 中间加寄存器怎么加  详情 回复 发表于 2012-5-18 16:56
点赞 关注
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 

回复
举报

31

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
好像经常会碰到这种情况,自动累加的时候也常有,有时候加个D触发器能消去有时候又没效果,来个高手指点下吧
此帖出自FPGA/CPLD论坛
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

问题请教

8.Found clock high time violation at 14.8 ns on register "|counter|lpm_counter:count1_rtl_0|dffs[11]"
原因:违反了steup/hold时间,应该是后仿真,看看波形设置是否和时钟沿符合steup/hold时间
措施:在中间加个寄存器可能可以解决问题

中间加寄存器怎么加
此帖出自FPGA/CPLD论坛
个人签名做到最好
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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