Verilog编写计数器出现问题,求助

ningningxiaofengzi 2012-05-17 01:53:20
module sync_counter10(clk,c);
input clk; //时钟输入
output c; //输出

wire clk;
reg c;
reg [3:0] counter;

always @(posedge clk)
begin
if(counter==9)
begin
counter<=0;
c<=1;
end
else if(counter<9)
begin
counter<=counter+1;
c<=0;
end
else
begin
counter<=0;
c<=0;
end
end

endmodule
这是一个简单的十位计数器,always块的功能就是计数值小于9时候加1、等于9了清零,在时钟信号clk上升沿触发。按照这个,clk每检测到一个上升沿就应该改变count的值。但是在testbench中通过initial块给count写入初值后执行程序,在波形观察发现count值没有变,不知道是程序问题还是测试模块问题?该如何改正?
...全文
1081 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq466098382 2012-12-28
  • 打赏
  • 举报
回复
呵呵。。。。
ningningxiaofengzi 2012-09-22
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

引用 1 楼 的回复:

always@(posdge clk )
if(cnt==9)begin
cnt <= 0;
c <= 1;
end
else begin
cnt <= cnt + 1;
c <= 0;
end


二楼不要太嚣张,每个人都有弱小的时候。我觉得楼主写的没问题,反而比你写的好。 你的代码在 count>9的时候没有楼主处理得好。
[/Quote]很久没来论坛了,后来确实是testbench有问题的,已经解决了。谢谢你啊,2楼除了损人没提供任何帮助,我看到他一般回复都是嘲笑别人连这个都不会,有时候还骂人,一般都是只嘲笑不提供技术帮助,对我能回答一点没意义的代码已经算良心发现了。
gongtingsb 2012-07-01
  • 打赏
  • 举报
回复
看过代码了
貌似写的没啥问题。
建议:加一个复位信号reset,对count进行赋初值;
如果还是不行的话,楼主把仿真的波形也贴一下吧,看看到底出了什么问题。。。
小苍蝇别闹 2012-06-14
  • 打赏
  • 举报
回复
哈哈,有人献丑被批评了
andrew_ncrl 2012-06-14
  • 打赏
  • 举报
回复
补充下2楼写的,应该将cnt==9改为cnt>=9,这样可以更好地处理异常,比如cnt跳到12这样的情况
AnswerLJ 2012-06-14
  • 打赏
  • 举报
回复

module count_10(
clk,
count
);
input clk;
output [3:0] count;

reg [3:0] count;

always@(posedge clk)
begin
if(count >= 4'd9)
count <= 4'd0;
else
count <= count + 1'b1;
end

endmodule

module count_10_tb();
reg clk;
wire [3:0] count;

count_10 count_10(
.clk(clk),
.count(count)
);

initial begin
clk = 0;
count_10.count = 4'b0000; //这里 需要对待测试模块中的所有 reg 变量初始化。如果待测试模块有 reset 则 不需要这个了。
forever #5 clk = ~clk;
end

initial
begin
$fsdbDumpfile("wave_test.fsdb");
$fsdbDumpvars;
end

endmodule
PWHOK 2012-06-12
  • 打赏
  • 举报
回复
最好加一个全局复位,赋一个初始值。
delacrxoix_xu 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

always@(posdge clk )
if(cnt==9)begin
cnt <= 0;
c <= 1;
end
else begin
cnt <= cnt + 1;
c <= 0;
end
[/Quote]

二楼不要太嚣张,每个人都有弱小的时候。我觉得楼主写的没问题,反而比你写的好。 你的代码在 count>9的时候没有楼主处理得好。
delacrxoix_xu 2012-06-06
  • 打赏
  • 举报
回复
testbench 很简单吧? 就一个时钟信号。。。。 楼主别灰心。每个人都有这个时候
maoxzh 2012-06-05
  • 打赏
  • 举报
回复
查一下Testbench吧
diana89 2012-06-05
  • 打赏
  • 举报
回复
应该是testbench有问题。
把你的testbench发出来看看。
Binzo 2012-05-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

always@(posdge clk )
if(cnt==9)begin
cnt <= 0;
c <= 1;
end
else begin
cnt <= cnt + 1;
c <= 0;
end
[/Quote]
除了posedge写错了,貌似正确。
吻花者 2012-05-19
  • 打赏
  • 举报
回复
呵呵,2楼的经典啊!!!要是你看不懂还是放弃吧!!!
falloutmx 2012-05-17
  • 打赏
  • 举报
回复
显然testbench有问题
net_friends 2012-05-17
  • 打赏
  • 举报
回复
回家种地吧 你不适合
walkman_chen 2012-05-17
  • 打赏
  • 举报
回复
看不出有什么问题,可能跟测试模块有关
ningningxiaofengzi 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

always@(posdge clk )
if(cnt==9)begin
cnt <= 0;
c <= 1;
end
else begin
cnt <= cnt + 1;
c <= 0;
end
[/Quote]
还是不行,而且这么一改,c的改变不能体现出来了
net_friends 2012-05-17
  • 打赏
  • 举报
回复
现在的孩子 怎么都不学学怎么去解决问题呢
net_friends 2012-05-17
  • 打赏
  • 举报
回复
always@(posdge clk )
if(cnt==9)begin
cnt <= 0;
c <= 1;
end
else begin
cnt <= cnt + 1;
c <= 0;
end

6,158

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧