0

コードを生成できる小さな Java プログラムを作成しようとしていVerilogます。私は Verilog 言語をほとんど知らないので、簡単な例を作成するのに問題があります。

2 つの入力a, bと 1 つの出力があるとしますc。こちらも2州。State1は初期状態であり、 を必要とState2する特定の条件に進みます。wire1b = 1

この例の私の出力にはstate2 & a、満たすべき条件があります。

質問: 以下のおおよその設計を使用するとVerilog、私の例によると、完全なコードはどのように見えるでしょうか?

//simplified without inheritance
class Input {
    String varname;
    new Input(String varname);
}

class Output {
    String varname;
    String condition;
    new Output(String varname, String condition);
}

class State {
    String varname;
    new State(String varname);
}

class Wire {
    String condition;
    Input input;
    Ouput output;
    new Wire(Input input, Output output, String condition);
}

Input input1 = new Input("a");
Input input2 = new Input("b");
State state1 = new State("initial");
State state2 = new State("following");
Wire wire12 = new Wire(state1, state2, "b");
Ouput output1 = new Output(c, "state2 & a");

Verilog コードは、これに基づいてどのように見える必要がありますか?

module BasicFsm(
    input clock,
    input reset,
    input a,
    input b,
    output c
);

always @(posedge clock)
//how to continue here?
4

1 に答える 1

2

次のようなものは、入力仕様から簡単に導出できると思われる実装への良い出発点になるでしょう。

このようなものを使用する前に、生成されたコードをテストする必要があります。これには多くの無料のシミュレーターが用意されています。無料のシミュレーターに関する質問はこちらにあります。

module BasicFsm(
    input      clock,
    input      reset,
    input      a,
    input      b,
    output reg c
);

reg        state;
wire       nexstate;

localparam S_STATE1    = 1'b0; //Could name initial
localparam S_STATE2    = 1'b1; //Could name following

always @(posedge clock or posedge reset) begin
  if(reset) begin
    state <= S_STATE1;
  end
  else begin
    state <= nextstate
  end
end

//Combinatorial nextstate
always @* begin
  case(state) 
    S_STATE1    : 
     if ( b == 1'b1 ) begin
       nextstate = S_STATE2 ; 
     end
     else begin
       nextstate = state ; //Hold state
     end
    S_STATE2    : nextstate = state ; //locked up forever if you get here
    default     : nextstate = S_STATE1;
  endcase
end

//Combinatorial output
always @* begin
  c = (state == S_STATE2) && (a == 1'b1);
end
于 2013-04-09T14:02:21.337 に答える