Como você implementar esta lógica digital em Verilog ou VHDL?
Pergunta
Eu postei uma resposta outra questão stackoverflow que requer alguma lógica digital a ser implementado em Verilog ou VHDL para que ele possa ser programado em um FPGA.
Como você poderia implementar o seguinte diagrama lógico em Verilog, VHDL, ou qualquer outra linguagem de descrição de hardware?
As caixas numeradas representar bits em um campo. Cada campo tem K bits, e os bits para atual e máscara será fornecido por um sistema de computador (utilizando um registo latched ou equivalente). Os bits em próxima será lido de volta para esse mesmo sistema de computador.
alt texto http://img145.imageshack.us/img145/5125/bitshifterlogicdiagramkn7 .jpg
Veja também: este stackoverflow pergunta
Solução
Algo como isso?
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 mas não simulado)