集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 5955|回复: 14

这个verilog程序有何问题?

[复制链接]
longtim 发表于 2010-6-28 01:05:03 | 显示全部楼层 |阅读模式
这个verilog程序有何问题?
module ludeng(clk,rst,min1,min5,min10,reg_ind,major_red,major_green,minor_red,minor_green);
parameter major_0=0,major_1=1,minor=2;
input clk,rst,reg_ind;
output min1,min5,min10;
output major_red,major_green,minor_red,minor_green;
reg min1,min5,min10;
reg next_state;
reg state;
reg cnt;

always@(posedge clk or posedge rst)
begin
if(rst==1'b1)
state<=major_0;
else state<=next_state;
end

always@(state or min1 or min5 or min10 or reg_ind)
begin
  case(state)
  major_0:
  begin
  major_green=1'b1;
  minor_red=1'b1;
  if(min5==1'b1)
  next_state=major_1;
  else next_state=major_0;
  end
  major_1:
  begin
  if((min10==1'b1)||(reg_ind==1'b1))
  next_state=minor;
  else next_state=major_1;
  end
  minor:
  begin
  minor_green=1'b1;
  major_red=1'b1;
  if(min1==1'b1)
  next_state=major_0;
  else next_state=minor;
  end
  default:
  
  next_state=major_0;
  
  endcase



always@(posedge clk)
  begin
  if(rst==1'b1)
  cnt=10'h000;
  else
  if(clr==1'b1)
  cnt=10'h000;
  else cnt=cnt+1'b1;
  end

always@(cnt or state)
begin if((state=major_0)&&(cnt==9'd299))
min5=1'b1;
else min5=1'b0;
end

always@(cnt or state)
begin if((state=major_1)&&(cnt==9'd299))
min10=1'b1;
else min10=1'b0;
end

always@(min1 or min5 or min10)
begin if(min1||min5||min10)
clr=1;
else clr=0;
end
always@(rst or state)
begin
if(rst=1)
reg_ind<=1'b0;
else if(state==minor)
reg_ind<=1'b0;

end




endmodule
encounter 发表于 2010-6-28 02:03:02 | 显示全部楼层
好帖,顶了
longtime 发表于 2010-6-28 02:57:43 | 显示全部楼层
你编译提示出了什么问题?
UFP 发表于 2010-6-28 04:57:09 | 显示全部楼层
自己回去好好研究下吧,错的地方实在太多了
 楼主| longtim 发表于 2010-6-28 05:03:26 | 显示全部楼层
我是新手看不出来,什么道道?
ngtim 发表于 2010-6-28 05:42:40 | 显示全部楼层
begin end成对出现
ngtim 发表于 2010-6-28 07:40:58 | 显示全部楼层
我下午去实验窒看看吧,晚是给你说
FFT 发表于 2010-6-28 08:56:01 | 显示全部楼层
你编译一下,出错的地方:<br>
always 那一块差一个end<br>
然后output型的不可以用在always里面而只能用在assign里面
CHA 发表于 2010-6-28 09:46:49 | 显示全部楼层
不好意思我刚才说的&ldquo;然后output型的不可以用在always里面而只能用在assign里面 &rdquo;在这里不对,它是指在testbench里不对(在testbench里output型的不可以用在always里面而只能用在assign里面),在这里是对的。在模块里input型不可以用在always里面而只能用在assign里面.
 楼主| longtim 发表于 2010-6-28 11:01:06 | 显示全部楼层
output型要定义成reg型,凡是在always里要赋值的都要定义成reg型,一般在写完output后就直接把它们定义成reg型。
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-25 01:26 , Processed in 0.066322 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表