打印

求助一个语法问题

[复制链接]
1996|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、第二个进程会产生锁存器。不好。

使用特权

评论回复
5
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)

使用特权

评论回复
6
bearpp| | 2010-3-31 13:05 | 只看该作者
更正

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

这样2个波形才一样

使用特权

评论回复
7
wycawyc| | 2010-3-31 17:32 | 只看该作者
是要分频还是要输出个不同占空比的信号。要实现的功能都没说。不知道怎么给你改。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

42

帖子

0

粉丝