|
最近在做一个出租车计费器的东西……我想设计这样一个模块,用于预置起步价和加价,有以下输入
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 [15:0] in_base_price;
input [15:0] in_add_price;
//input [31:0] set_price_led;
input [31:0] price_led;
output [15:0] base_price;
output [15:0] add_price;
output [31:0] led_out;
reg [15:0] base_price;
reg [15:0] add_price;
reg [31:0] led_out;
//reg [15:0] base_price=16'b0000000010000000;
//reg [15:0] add_price=16'b0000000000011000;
reg [15:0] re_base=16'b0000000010000000;
reg [15:0] 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 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|