首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

求助一段verilog程序的功能与时序仿真

求助一段verilog程序的功能与时序仿真

// 刚刚开始学习使用verilog,请各位指教
// 我写了如下代码:

// 功能: 实现一个可控的十进制计数器
module ramuse( cntout, mclk, dinen);

output [7:0]  cntout;
input mclk, dinen;

reg  cntout;

reg [7:0] cnt = 0;

always @(posedge mclk ) begin
 if(dinen == 1)
  begin
   if(cnt<=9)
   cnt=cnt+1;
   else
   cnt=0;
  end
 else
  cnt = 0;
 cntout = cnt;
end
//assign cntout = cnt;
endmodule

// 问题:
// 不知为什么,功能仿真时cntout的输出是高阻态,而在时序仿真时的结果却正常得很
// 哪位仁兄帮忙解释一下这是什么问题啊
// 谢谢

这是功能仿真后的图 

 

这是时序仿真后的图 

你的程序一看就有错误啊!

reg [7:0] cnt = 0;这样赋初值是错误的.

reg  cntout;应为上面一样.

还有最后一个else
  cnt = 0;
 cntout = cnt;
应加begin-end语句.

正确的应是:

module ramuse( cntout, mclk, dinen);

output [7:0]  cntout;
input mclk, dinen;

reg[7:0]   cntout;

reg [7:0] cnt;

always @(posedge mclk )
begin
 if(dinen == 1)
   begin
     if(cnt<=9)
     cnt=cnt+1;
     else
     cnt=0;
   end
    else
      begin
     cnt = 0;
     cntout = cnt;
      end
end
//assign cntout = cnt;
endmodule
功能不知对不对,下次帮你看看!

一切皆有可能,爱拼才会赢!

这个试试啊!

module ramuse( clr, clk, cout);
output [7:0]  cout;
input clr,clk;
reg[7:0]   cout;
integer i;
always @(posedge clk )
begin
 if(!clr)
  cout<=0;
 else if(i==9)
     begin
  i<=0;
  cout<=cout+1;
     end
 else
  begin
  i<=i+1;
  cout<=0;
  end
end
endmodule

仿真图像是这样的:

靠!不支持图像啊!你自己试试吧!

 

一切皆有可能,爱拼才会赢!
module ramuse( clr, clk, cout);
output [7:0]  cout;
input clr,clk;
reg[7:0]   i,cout;
always @(posedge clk )
begin
 if(!clr)
  cout<=0;
 else if(i==9)
     begin
  i<=0;
  cout<=cout+1;
     end
 else
  begin
  i<=i+1;//这里不应该再赋初值0于cout;
   end
end
endmodule
一切皆有可能,爱拼才会赢!
返回列表