Board logo

标题: 求助一段verilog程序的功能与时序仿真 [打印本页]

作者: 听松2006    时间: 2007-1-29 19:09     标题: 求助一段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的输出是高阻态,而在时序仿真时的结果却正常得很
// 哪位仁兄帮忙解释一下这是什么问题啊
// 谢谢

这是功能仿真后的图 

 

这是时序仿真后的图 


作者: yshwy2008    时间: 2007-1-31 21:53

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

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
功能不知对不对,下次帮你看看!


作者: yshwy2008    时间: 2007-1-31 22:25

这个试试啊!

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

仿真图像是这样的:

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

 


作者: yshwy2008    时间: 2007-2-6 12:45

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





欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0