fpga之有限狀態機 - assassinn -
module fsm(clock,reset,a,f,g);
input clock,reset;
input a;
output f,g;
reg f,g;
reg [3:0]state;
parameter idle=4'b0000,
start=4'b0010,
stop=4'b0100,
clear=4'b1000;
always@(posedge clock)
if(!reset) begin
state=idle;
f<=0;
g<=0;
endelse case(state)
idle: begin
if(a) begin
state<=1;
g<=0;
endelse state<=idle;
endstart:begin
if(!a) state<=stop;
else state<=start;
endstop: begin
if(a) begin
state<=clear;
f<=1;
endelse state<=stop;
endclear:begin
if(!a) begin
state<=idle;
f<=0;
g<=1;
endelse state<=clear;
enddefault: state<=idle;
endcase
endmodule
module fsm(clock,reset,a,f,g);
inpout clock,reset,a;
output f,g;
reg [1:0] state;
wire [1:0] nextstate;
parameter
idle=2'b00, start=2'b01;
stop=2'b10,clear=2'b11;
always@(posedge clock)
if(!reset) begin
state<=idle;
endelse state<=nextstate;
assign nextstate=
(state==idle) ? (a ? start : idle) :
(state==start) ? (!a ? stop : start):
(state==stop) ? (a ? clear : stop) :
(state==clear) ?(!a ? idle : clear) : idle;
assign f=((state==stop)&&a);
assign g=((state==clear)&&(!a || !reset))
endmodule
wire nextstate;
always@(posedge clock)
if(!reset) begin
state<=idle;
f<=0;
g<=0;
endelse state<=nextstate;
always@(a or state)
f=0;
g=0;
if(state==idle)
if(a) nextstate=start;
else nextstate=idle;
else if(state==start)
if(!a) nextstate=stop;
else nextstate=start;
else if(state==stop)
if(a) begin
nextstate=clear;
f=1;
endelse nextstate=stop;
else if(state==clear)
if(a) nextstate=clear;
else begin
nextstate=idle;
f=0;
g=1;
endelse default nextstate=idle;
1.邏輯關係轉為狀態轉換圖或者狀態轉換表;
2.狀態編碼,gary碼,獨熱碼之類;
3.選定觸發器的型別(電平出發還是上公升沿或下降沿出觸發),並求出狀態方程,驅動方程,輸出方程;
4.按照方程得出邏輯圖;
module sprocessor(instr, out);// instr 17,16bit choose mode;15-8,data one;7:0;data two;
input [17:0]instr;
output [8:0]out;
reg [8:0]out;
reg fun;
reg [7:0]opr1;
reg [7:0]opr2;
function [16:0]mount;
input [17:0]instr;
reg [1:0]fun_how;
reg [7:0]opr1;
reg [7:0]opr2;
reg ch;
begin
fun_how=instr[17:16];
opr2=instr[7:0];
case(fun_how)
2'b00: begin
ch=1;
opr1=instr[15:8];
end2'b01: begin
ch=0;
opr1=instr[15:8];
end2'b10: begin
ch=1;
opr1=1;
end2'b11: begin
ch=0;
opr1=1;
endendcase
mount=;
endendfunction
always@(instr)
begin
=mount(instr);
if(fun==1) out=opr1+opr2;
else out=opr1-opr2;
endendmodule
posted on 2017-10-25 16:06
收藏
重新整理頁面
返回頂部
powered by:
有限狀態機
有限狀態機 finite state machine,fsm 又稱有限狀態自動機,簡稱狀態機,是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型。狀態儲存關於過去的資訊,就是說 它反映從系統開始到現在時刻的輸入變化。轉移指示狀態變更,並且用必須滿足來確使轉移發生的條件來描述它。動作是在給...
有限狀態機
以前,只碰到過 陣列中所有數字只出現2次,只有乙個出現1次,找這個數的問題 每次迴圈異或陣列中元素,最後的結果就是single one。這次換作出現3次就懵逼了,主要原因,沒有使用過有限狀態機,應該說是連概念都沒有,所以這次一定要好好記錄一下 關於這道題的解釋discussion中woshidais...
有限狀態機
需要掌握的名詞 數字系統有兩大類有限狀態機 finite state machine,fsm moore狀態機和mealy狀態機。狀態機名 次態輸出 moore摩爾 f 現狀,輸入 g 現狀 mealy公尺粒 f 現狀,輸入 g 現狀,輸入 mealy型狀態機 下一狀態不但與當前狀態有關,還與當前輸...