求助一个语法问题

[复制链接]
2639|6
 楼主| cwfboy 发表于 2010-2-11 12:15 | 显示全部楼层 |阅读模式
module TEST(clk,output_1);
input clk;
output output_1;
reg output_1;
reg[3:0] temp;
always @(posedge clk)
begin
if (temp<10)
temp<=temp+1;
else temp<=0;
end
always @(temp)
begin
if(temp==4)
output_1<=1;
else if(temp==9)
output_1<=0;
else output_1<=output_1;
end
endmodule
这个程序不知道为什么仿真就是不正确
而改成
always @(temp)
begin
if(temp<4)
output_1<=0;
else output_1<=1;
end
endmodule
就仿真真确了,为什么啊?????????
llljh 发表于 2010-2-16 10:29 | 显示全部楼层
啊?不会吧
tiantian001 发表于 2010-2-19 20:06 | 显示全部楼层
尝试设定一下temp的初始值
  还有,这个程序是分频么,要仿真出什么结果来?没说明白
lonvon 发表于 2010-2-28 13:11 | 显示全部楼层
不好的几点:
1、电路没有复位端 reset, 这样各个信号没有初始值;
2、第二个always本应是组合逻辑,应用阻塞赋值= ,却用了<=, 当然这样综合器也会编译;
   如果就这个设计来说,因为没说明白要干嘛, 如果是要构造一个output_1信号波形,建议
   output_1用时序逻辑来产生。
3、第二个进程会产生锁存器。不好。
bearpp 发表于 2010-3-31 13:03 | 显示全部楼层
主要是第二个block的问题。还有reset的问题,同意楼上。
有几种改法:

//改法1:
always @(posedge clk or negedge rstn)
  if(~rstn)
    output_1 <= 1'b0;
  else if(temp==3)
    output_1 <= 1'b1;
  else if(temp==8)
    output_1 <= 1'b0;

//改法2:
assign output_1 = (temp<4) ? 1'b0 : 1'b1;

第一种改法产生一个寄存器输出
第二种改法的输出是组合逻辑(用temp控制的mux)
bearpp 发表于 2010-3-31 13:05 | 显示全部楼层
更正

//改法2
assign output_1 = ((temp<4) | (temp>8)) ? 1'b0 : 1'b1;

这样2个波形才一样
wycawyc 发表于 2010-3-31 17:32 | 显示全部楼层
是要分频还是要输出个不同占空比的信号。要实现的功能都没说。不知道怎么给你改。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

42

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部