stonemore 发表于 2011-3-28 11:42:13

fpga设计中关于初值的问题

最近在做一个出租车计费器的东西……我想设计这样一个模块,用于预置起步价和加价,有以下输入
state_done,set_state 这两信号是由前段的fsm供给,经过实验测试,fsm输出没有问题;
in_base_price,in_add_price 这两信号,是由前端的bcd码加法器给出,加法器也没什么问题;base是起步价,add是加价;
price_led;这是另一路输入信号……和预置的时候无关

输出为base_price, add_price起步价、加价;和给后面八位数码管显示模块输入 led_out;

然后希望在
{state_done,set_state}=10的时候,对起步价寄存器re_base进行修改起步价,同时保持re_add不变,同时输出16'hba5e,base_price,即显示BASE+起步价;
{state_done,set_state}=11的时候,对起步价寄存器re_add进行修改起步价,同时保持re_base不变,同时输出16'haddf,add_price,即显示ADD+加价;
通过这样的方式,可以方便的知道预置的数值是多少……

然后当state_done=0时,锁存住当时的re_base和re_add,同时输出输出为base_price, add_price起步价、加价,保持不变……

初始值有问题,也就是说,一开始前端fsm模块给state_done,set_state两个信号的值都是0时,
模块输出应该是re_base和re_add的初值……可是,测试的时候……这两个数……明显不是初值啊……
各种乱码……求解哦……

附上修改后代码……






module set_done(       
//        state_done,        in_base_price,in_add_price,base_price,add_price,set_price_led,price_led,led_out
        state_done,        set_state,in_base_price,in_add_price,base_price,add_price,led_out,price_led
                        );
input state_done;
input set_state;
input in_base_price;
input in_add_price;
//input set_price_led;
input price_led;

output base_price;
output add_price;
output led_out;
reg base_price;
reg add_price;
reg led_out;

//reg base_price=16'b0000000010000000;
//reg add_price=16'b0000000000011000;

reg re_base=16'b0000000010000000;
reg re_add =16'b0000000000011000;

always @ (state_done or in_base_price or in_add_price or set_state )
//always @ (state_done or set_state )
        begin       
                case({state_done,set_state})
                        2'b10:        begin
                                //base_price = in_base_price;
                                //add_price = in_add_price;
                                //re_add = add_price;
                                re_base = in_base_price;
                                led_out = {16'hba5e,re_base};                                       
                                        end
                        2'b11        :begin
                                //base_price = in_base_price;
                                //add_price = in_add_price;
                                re_add = in_add_price;
                                //re_base = in_base_price;
                                led_out = {16'haddf,re_add};
                                        end
                        default :begin
                                base_price = re_base;
                                add_price = re_add;
                                led_out = price_led;
                                /*base_price = 16'b0000000010000000;
                                add_price = 16'b0000000000011000;
                                led_out = price_led;*/
                                        end
                endcase
               
/*                if(state_done == 1'b0)
                        begin
                        base_price = base_price;
                        add_price = add_price;
                        led_out = price_led;
                        end
                else        begin
                        base_price = in_base_price;
                        add_price = in_add_price;       
                        led_out = set_price_led;
                                end */
        end
       
endmodule

stonemore 发表于 2011-3-28 13:41:50

终于通过审核了……编辑主题……这楼也编辑了……清爽很多啊
页: [1]
查看完整版本: fpga设计中关于初值的问题