Wie würden Sie diese digitale Logik in Verilog oder VHDL implementieren?
Frage
ich gepostet ein href="https://stackoverflow.com/questions/480405/finding-the-next-in-round-robin-scheduling-by-bit-twiddling"> eine andere Frage Stackoverflow denen einige erfordert digitale Logik in Verilog oder VHDL umgesetzt werden, so dass es in einen FPGA programmiert werden kann.
Wie würden Sie das folgende Logikdiagramm in Verilog, VHDL, oder jede andere Hardware-Beschreibungssprache implementieren?
Die nummerierten Felder repräsentieren Bits in einem Feld. Jedes Feld hat K Bits und die Bits für Strom und Maske wird durch ein Computersystem zur Verfügung gestellt werden (ein verriegelte Registers o.Ä.). Die Bits in nächsten wird wieder in demselben Computersystem gelesen werden.
alt text http://img145.imageshack.us/img145/5125/bitshifterlogicdiagramkn7 .jpg
Siehe auch: diese Stackoverflow Frage
Lösung
So etwas wie das?
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
(Disclaimer: linted aber nicht simuliert)