微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > verilog菜鸟问题请教

verilog菜鸟问题请教

时间:10-02 整理:3721RD 点击:
module V3_DDR2_MT46H64M16(
        input                                            sys_clk_ibufg,
        input c3_p0_wr_full,
        output test1
    );
reg [29:0]        c3_p0_cmd_byte_addr;
reg    test1_1;
  
always@ (posedge sys_clk_ibufg)
        if (c3_p0_cmd_byte_addr ==30'b10000_00000_00000_00000_00000_00000)
                begin
                        c3_p0_cmd_byte_addr <=30'b00000_00000_00000_00000_00000_00000;
                         if(!c3_p0_wr_full)
                                test1_1   <= 1'b1;
                          else
                                test1_1   <= 1'b0;
                end
        else
                c3_p0_cmd_byte_addr<=c3_p0_cmd_byte_addr+1;

assign test1=test1_1;
endmodule

初学verilog,
就这么简单的几行,仿真的时候c3_p0_cmd_byte_addr一直是红色,为何?
谢谢!

初始化个值 0

是不是c3_p0_cmd_byte_addr的初始值问题,你没赋初始值,所以c3_p0_cmd_byte_addr初始值是x,你赋初始值再试试

没有初始化

代码中c3_p0_cmd_byte_addr没有初始化(即:没有赋初值),也就是说该信号在至始至终都是不确定的,因此仿真过程中一直为红色的不确定态。须在always语句前作初始化,例如:
initial
begin
c3_p0_cmd_byte_addr ==30'b00000_00000_00000_00000_00000_00000;
end

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top