📄 seller.v
字号:
module seller(clk,rst_n,in_wujiao,in_yikuai,
sell_succeed,fetch_alarm,get_change);
input clk;
input rst_n;
input in_wujiao;
input in_yikuai;
output sell_succeed;
output fetch_alarm;
output get_change;
reg sell_succeed;
reg fetch_alarm;
reg get_change;
reg in_wujiao_reg;
reg in_yikuai_reg;
//one_hot
parameter idle = 5'b00001,
wujiao = 5'b00010,
yikuai = 5'b00100,
yikuaiwu = 5'b01000,
liangkuai= 5'b10000;
reg[4:0] PS;
reg[4:0] NS;
//ouput with clk
//assign sell_succeed = sell_succeed;
//assign fetch_alarm = fetch_alarm;
//assign get_change = get_change;
always@(posedge clk or negedge rst_n)
begin
if(~rst_n)
begin
in_wujiao_reg <= 0;
in_yikuai_reg <= 0;
end
else
begin
in_wujiao_reg <= in_wujiao;
in_yikuai_reg <= in_yikuai;
end
end
//state shift
always@(posedge clk or negedge rst_n)
begin
if(~rst_n)
PS<=idle;
else
PS<=NS;
end
//state coding
always@(in_wujiao or in_yikuai or PS or in_wujiao_reg or in_yikuai_reg)
begin
case(PS)
idle:
if(in_wujiao==0 && in_wujiao_reg==1)
NS = wujiao;
else if (in_yikuai==0 && in_yikuai_reg ==1)
NS = yikuai;
else
NS = idle;
wujiao:
if(in_wujiao==0 && in_wujiao_reg==1)
NS = yikuai;
else if(in_yikuai==0 && in_yikuai_reg ==1)
NS = yikuaiwu;
else
NS = wujiao;
yikuai:
if(in_wujiao==0 && in_wujiao_reg==1)
NS = yikuaiwu;
else if(in_yikuai==0 && in_yikuai_reg ==1)
NS = liangkuai;
else
NS = yikuai;
yikuaiwu:
if(in_wujiao==0 && in_wujiao_reg==1)
NS = liangkuai;
else if(in_yikuai==0 && in_yikuai_reg ==1)
NS = idle;
else
NS = yikuaiwu;
liangkuai:
if((in_wujiao==0 && in_wujiao_reg==1) || (in_yikuai==0 && in_yikuai_reg ==1))
NS = idle;
else
NS = liangkuai;
default:
NS = idle;
endcase
end
//output
always@(posedge clk or negedge rst_n)
begin
if(~rst_n)
begin
sell_succeed <= 1'b0;
fetch_alarm <= 1'b0;
get_change <= 1'b0;
end
else
case(PS)
yikuaiwu:
if(in_yikuai)
begin
fetch_alarm <= 1'b1;
sell_succeed <= 1'b1;
end
else
begin
sell_succeed <= 1'b0;
fetch_alarm <= 1'b0;
get_change <= 1'b0;
end
liangkuai:
if(in_yikuai)
begin
fetch_alarm <= 1'b1;
sell_succeed <= 1'b1;
get_change <= 1'b1;
end
else if(in_wujiao)
begin
sell_succeed <= 1'b1;
fetch_alarm <= 1'b1;
end
else
begin
sell_succeed <= 1'b0;
fetch_alarm <= 1'b0;
get_change <= 1'b0;
end
default:
begin
sell_succeed <= 1'b0;
fetch_alarm <= 1'b0;
get_change <= 1'b0;
end
endcase
end
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -