論理回路デザイン
|
|

| NASCO =  | N-1 Π i=0 |
iVldi | M-1 Π i=0 |
oStalli |     ここで、NとMはそれぞれ前段と後段の結合数[2] |
| 単純な結合方式 |
module node(iVld, iStall, oVld, oStall);
parameter N = 4;
parameter M = 4;
input [N-1:0] iVld;
output [N-1:0] iStall;
output [M-1:0] oVld;
input [M-1:0] oStall;
wire nasc = (&iVld) & (~|oStall);
assign iStall = {N{~nasc}};
assign oVld = {M{nasc}};
endmodule
|
| 一般的な結合方式 |
|
module node(iVld, iStall, oVld, oStall);
parameter P = 2;
parameter Q = 2;
parameter M = 1<<P;
parameter N = 1<<Q
input [N-1:0] iVld;
output [N-1:0] iStall;
output [M-1:0] oVld;
input [M-1:0] oStall;
reg [N-1:0] iStall;
reg [M-1:0] oVld;
integer i;
always @(iVld or oStall)
for (i=0; i<N; i=i+1)
iStall = ~&vldSerFunc(iVld, i) | (|oStall);
always @(iVld or oStall)
for (i=0; i<M; i=i+1)
oVld = &iVld & (~|StallSerFunc(oStall, i));
function [N-1:0] vldSerFunc;
input [N-1:0] vld;
input [Q-1:0] num;
integer i;
for (i=0; i<N; i=i+1)
vldSerFunc[i] = (i == num) ? 1'b1 : vld[i];
endfunction
function [M-1:0] StallSerFunc;
input [M-1:0] Stall;
input [P-1:0] num;
integer i;
for (i=0; i<M; i=i+1)
StallSerFunc[i] = (i == num) ? 1'b0 : Stall[i];
endfunction
endmodule
|
回路デザイン > パイプライン > 結合 次のページ(スループット制御) このページのTOP ▲