verilog错误:cannot match operand(s) in the condition

这是做一个led自动256次变色的程序,但现在不知道哪里错了,求解。modulepwm_test6(clk,reset,led);inputclk;//50Mhzinpu... 这是做一个led自动256次变色的程序,但现在不知道哪里错了,求解。

module pwm_test6(clk,reset,led);
input clk;//50Mhz
input reset;

output led;
reg[32:0] count;
reg [25:0] timecounter;
reg [7:0] pwm_count;
reg flag;
reg pwm_flag;

always@(posedge clk or negedge reset)
begin
if(!reset)
timecounter = 0;
else
timecounter = timecounter +26'd1;

if(timecounter == 26'd49999999)
timecounter = 0;
end

always@(posedge clk)
begin
count = count+1'b1;
if(count[11:4]<pwm_count)
pwm_flag = 1;
else
pwm_flag = 0;
if (count[15] == 1'b1)
begin
if(flag == 1'b1)
begin
flag = 1'b0;
if(timecounter == 26'd25000000)
pwm_count = (pwm_count + 8'b00000001);

end
end
else
flag = 1'b1;
end
assign led = pwm_flag;

endmodule
展开
 我来答
曾凌青39
推荐于2017-09-10
知道答主
回答量:18
采纳率:100%
帮助的人:5万
展开全部
第一个always语句优先级都错了。修正如下:
always@(posedge clk or negedge reset)
begin
if(!reset)
timecounter <= 0;
else if (timecounter == 26'd49999999)
timecounter <= 0;
else
timecounter <= timecounter +26'd1;
end

第二句逻辑关系有点乱,always 语句最好采用阻塞赋值,一个always语句中不要对那么多的语句赋值。Count = 16'b1000_0000_0000_0000的时候,timecounter 的值也不能刚 26'd25000000,pwm_count也不会计数。
追问
请问如果不能根据timecounter的值让pwm_count每秒加一的话那该怎么赋值呢?把count[15]==1去掉?去掉flag的赋值之后直接

begin
if(timecounter == 26'd25000000)
pwm_count = (pwm_count + 8'b00000001);
end
行么?不好意思,我是个新手,感觉做这个有点混乱。。
追答
可以的
佳达源
2024-10-28 广告
关于您提到的产品型号GCM1555C1H100JA16D,它是我司电子元件产品线中的一款关键组件,广泛应用于精密电子设备中。该型号以其卓越的性能稳定性、高精度的电气参数及优良的耐环境特性而著称。我们致力于为客户提供高质量的产品与专业的技术支... 点击进入详情页
本回答由佳达源提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式