!!!スタック !!パラメータ ,パラメータ名,既定値,  ,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