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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4150|回复: 7

[求助] 请教达人帮我看看用verilog写的PWM哪里出错了

[复制链接]
发表于 2014-4-20 22:08:52 | 显示全部楼层 |阅读模式

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

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

x
我首先实现了一个用两位拨码开关控制输出的PWM,代码如下:



  1. modulepwm(clk,switches,PWM_out);

  2. parameter sd = 12500;//这是最小间隔,2个播码开关总共可以有4级的强度。每级的计数间隔为sd
  3. input   clk; //50MHz
  4. input [1:0]  switches;

  5. output  PWM_out;
  6. reg PWM_out;
  7. reg [15:0] counter = 0;

  8. always@ (posedge clk)begin
  9.       counter <= counter+1;
  10.       if(counter<=switches*sd)                  
  11. PWM_out <= 1;
  12.              else
  13.              PWM_out <= 0;
  14.              if (counter >=50000)
  15.                     counter <= 16'd0;
  16.       end
  17. endmodule


复制代码

现在我想加入一个控制按键key3,当键值为1时,让端口LED1输出PWM波,也就是说PWM_out赋给LED1就行了,同样当键值为0时,让LED2输出PWM波。
我是这样写的:



  1. always@ (posedge clk or negedge rst_n) begin
  2.         if(!rst_n) counter <= 16'd0;
  3.         else if(key3)
  4. assign LED1 = PWM_out;
  5. else  assign LED2 = PWM_out;
  6. end


复制代码

这个有错误
Error (10043): Verilog HDL unsupported feature error at pwm.v(35): Procedural Continuous Assignment to register is not supported
发表于 2014-4-20 22:49:49 | 显示全部楼层
在always块中 不能出现assign语句
 楼主| 发表于 2014-4-20 23:33:25 | 显示全部楼层
回复 2# yuqq

请问该如何修改呢?
发表于 2014-4-21 10:19:22 | 显示全部楼层
[img][/img]
发表于 2014-4-21 10:20:37 | 显示全部楼层
把 assign  A= B  改为 A<=B 两处都改 语法就没问题了
发表于 2014-4-21 14:11:19 | 显示全部楼层
楼上说的有道理。。。
发表于 2014-4-21 15:11:55 | 显示全部楼层
去掉第2个always,加:
assign LED1 = key3 & PWM_out;
assign LED2 = (~key3) & PWM_out;
发表于 2015-12-6 19:25:23 | 显示全部楼层
tks for the useful answer
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-8 11:54 , Processed in 0.025725 second(s), 9 queries , Gzip On, Redis On.

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