このデジタル ロジックを Verilog または VHDL でどのように実装しますか?
質問
投稿しました 答え に スタックオーバーフローの別の質問 これには、FPGA にプログラムできるように、デジタル ロジックを Verilog または VHDL で実装する必要があります。
次の論理図を Verilog、VHDL、またはその他のハードウェア記述言語で実装するにはどうすればよいでしょうか?
番号付きのボックスはフィールド内のビットを表します。各フィールドには、 K ビットとそのビット 現在 そして マスク コンピュータ システムによって提供されます (ラッチ レジスタまたは同等のものを使用)。中のビット 次 同じコンピュータ システムに読み戻されます。
代替テキスト http://img145.imageshack.us/img145/5125/bitshifterlogicdiagramkn7.jpg
以下も参照してください。 このスタックオーバーフローの質問
解決
このような何か?
module scheduler
#( parameter K = 10 )
(
input wire [K:1] current,
input wire [K:1] mask,
output reg [K:1] next
);
reg [K:1] a;
reg [K:1] b;
//'[i+1]' busses that wrap.
// eg, for a 4-bit bus...
// a[i]: a[4],a[3],a[2],a[1] (obviously...)
// a_wrap[i]: a[1],a[4],a[3],a[2]
wire [K:1] mask_wrap = { mask[1],mask[K:2] };
wire [K:1] a_wrap = { a[1], a[K:2] };
wire [K:1] current_wrap = { current[1], current[K:2] };
integer i;
always @( * ) begin
for( i=1; i<=K; i=i+1 ) begin
a[i] = ~current_wrap[i] && b[i];
b[i] = a_wrap[i] || mask_wrap[i];
next[i] = ~a[i] && mask_wrap[i];
end
end
endmodule
(免責事項:LINTEDが、シミュレートされません)
所属していません StackOverflow