- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!スタック
!!パラメータ
,定数名,既定値,
,パラメータ名,既定値,
,N,8,スタックの要素数
!!入出力ポート
, ,ポート名,既定値,
,入力,clk,1,グローバルクロック
,入力,reset,1,グローバルリセット
,入力,load,1,1のときclkの立ち上がりでスタックトップにdの値を書き込み
,入力,push,1,1のときclkの立ち上がりでスタックをプッシュ
,入力,pop,1,1のときclkの立ち上がりでスタックをポップ
,入力,d,16,スタックトップに書き込む値
,出力,qtop,16,スタックトップの値
,出力,qnext,16,スタックの2番目の値
!!ソースコード
module stack(clk, reset, load, push, pop, d, qtop, qnext);
parameter N = 8;
input clk, reset, load, push, pop;
input [15:0] d;
output [15:0] qtop, qnext;
reg [15:0] q [0:N-1];
assign qtop = q[0];
assign qnext = q[1];
always @(posedge clk or negedge reset)
if(!reset) q[0] <= 0;
else if(load) q[0] <= d;
else if(pop) q[0] <= q[1];
integer i;
always @(posedge clk or negedge reset)
for(i=1;i< N-1;i=i+1)
if(!reset) q[i] <= 0;
else if(push) q[i] <= q[i-1];
else if(pop) q[i] <= q[i+1];
always @(posedge clk or negedge reset)
if(!reset) q[N-1] <= 0;
else if(push) q[N-1] <= q[N-2];
endmodule