gooドクター有料プランが1ヶ月間無料!

ステートマシンについて、
3カウンタ回路を以下の仕様でVerilogに記述し、シミュレーションにより動作を確認せよ。
モジュール名:fsm2
入力信号名とビット数:ck(1ビット) rst(1ビット) din(1ビット)
出力信号名とビット数:dout(1ビット)
動作
・クロック入力ckの立ち上がりに同期して動作する。
・3クロック連続してdinに1が入力されると、doutに1を出力する。それ以外のときは0を出力する。
・ rstはリセット入力であり、rstが1のときは即座にdoutに0を 出力する。rstが0になって以降3クロック連続してdinに1が 入力されるまで、0を出力し続ける。

・ dinの入力系列011110に対して、000100を出力する。
補足
・この回路は4つの状態を有する。
という問題で、実行結果を画像のようにしたいのですが中々上手くいきません。
どうしたら画像のようになるのでしょうか?解説お願いします。

途中までのコードです。
module fsm(ck,rst,din,dout);
input ck;
input rst;
input din;
output dout;
reg [1:0] cur;
reg [1:0] nxt;
parameter S0=2'b00, S1=2'b01, S2=2'b01, S3=2'b10;
always @(rst or din or cur)begin
if(rst)
nxt<=S0;
else
case(cur)
S0:nxt<=(din==1'b1)?S1:S0;
S1:nxt<=(din==1'b1)?S2:S0;
S2:nxt<=(din==1'b1)?S3:S0;
S3:nxt<=(din==1'b1)?S3:S0;
default:
nxt<=S0;
endcase
end
always @(posedge ck)begin
cur<=nxt;
end
function dout_func;
input rst;
input din;
input [1:0] cur;
if(rst)
dout_func=1'b0;
else
case(cur)
S0:dout_func=1'b0;
S1:dout_func=1'b0;
S2:dout_func=1'b0;
S3:dout_func=(din==1'b1) ? 1'b0:1'b0;
default:
dout_func=1'bx;
endcase
endfunction
assign dout=dout_func(rst,din,cur);
endmodule
`timescale 1ps/1ps
module fsm_tp;
reg ck,rst,din;
wire dout;
parameter STEP=1000;
fsm fsm(ck,rst,din,dout);
always begin
ck=1; #(STEP/2);
ck=0; #(STEP/2);
end
initial begin
#(STEP/2) rst=1; din=0;
#(STEP/2) rst=0;
#STEP din=1;
#STEP din=1;
#STEP din=0;
#STEP din=1;
#STEP din=1;
#STEP din=1;
#STEP din=1;
#STEP din=0;
#STEP din=0;
$finish;
end
initial $monitor($stime,"ck=%b rst=%b din=%b dout=%b",ck,rst,din,dout);
endmodule

質問者からの補足コメント

  • 画像忘れてました。

      補足日時:2021/06/13 21:41
gooドクター

A 回答 (1件)

>実行結果を画像のようにしたいのですが


画像まだ?
    • good
    • 0
この回答へのお礼

https://oshiete.goo.ne.jp/qa/12409921.html
補足に画像が貼れなかったため、再投稿です

お礼日時:2021/06/13 21:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング