在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5790|回复: 4

[求助] 用FPGA实现一个开关控制8位流水灯的verilog程序(消除前面不定态)

[复制链接]
发表于 2015-8-12 20:18:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
大家好,我是一枚小菜鸟,刚刚接触FPGA,VERILOG学得也不好。这几天在试图用FPGA板来实现“一个SWITCH控制8位流水灯”,但是写VERILOG程序无果。。另外,我暂时不想用CLK,感觉SWITCH应该可以吧(设想其实就是用SWITCH代替CLK)。在网上看到一些别人写的程序,无一例外地——前面都有几个不定态。我希望能写出前面不含不定态的~下面附上我的程序,没编译成功,请求大家多多指教,万分感谢!module theleds(led,switch);
output[7:0]
led;
input
switch;
reg [7:0] ctl;
reg [7:0] led;
ctl=8'b00000001;
always @(switch)begin
begin
  if(ctl<8'b10000000) ctl=ctl<<1;
  else ctl=8'b00000001;
end
led=ctl;
end
endmodule

module stimulus;
  reg switch;
  wire [7:0] led;
  initial
  begin
  switch=0;
  #5 switch=1;
  #5 switch=0;
  #5 switch=1;
  #5 switch=0;
  #5 switch=1;
  #5 switch=0;
  #5 switch=1;
  #5 switch=0;
  #5 switch=1;
  #5 switch=0;
  #5 switch=1;
  #5 switch=0;
  #5 switch=1;
  #5 switch=0;
  #5 switch=1;
  #5 switch=0;
end
endmodule
发表于 2015-8-13 10:09:01 | 显示全部楼层
看语法!看看你哪里错了!
发表于 2015-8-13 13:39:18 | 显示全部楼层
1.ctl即为 reg型,那么一般只能在always中赋值;如果always之外赋值,此变量需要为net型,如wire;且需要使用assign 语句;led同理;
2.ctl不能即在always外又在always内部赋值;
2.stimulus中没有包含theleds模块;
发表于 2015-8-13 14:18:45 | 显示全部楼层
建议你找一本讲述Verilog的书,认真学习基本语法,代码中有几处错误都是基本语法错误,举例如下:
1、错误:ctl=8'b00000001;
      原因:ctl定义为reg型变量,如果想给它赋初值,可以有两种方法:a、直接在端口定义时赋值,即:reg [7:0] ctl = 8'b0000_0001;   b、增加复位信号,在always块中复位时赋初值。
2、错误:led=ctl
      原因:同1,建议将led改为wire型变量,用assign赋值,即:wire [7:0] led; assign led = ctl;
3、错误:stimulus 模块中没有对theleds模块的例化,具体例化方法建议参考书籍上的说明

以上均为个人建议,仅供参考
 楼主| 发表于 2015-8-14 19:48:27 | 显示全部楼层
多谢前辈们耐心解答,我明白啦。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-24 00:43 , Processed in 0.024195 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表