He escrito un desplazador de 8 bits en verilog
'timescale 1ns / 1ps
/* this is a very simple example of a 8 bit shift */
/* the shift amount is always 1 */
/* sw = 0 means left shift while sw = 1 means right shift */
/* this is an example of a combinational ciruit */
module shifter_8bit(input [7:0] A,
input sw,
output reg [7:0] B);
/* whenever the value of any of the input signal changes, we want the system to act */
/* therefore this would go into an always block */
always @(A, sw)
begin
/* because we are providing support for both LS as well as RS, we need a 2-1 MUX */
case(sw)
/* As sw is a one bit, we can have only two possibilities */
1'b0:
/* left shift A by 1 */
begin
B[7] = A[6];
B[6] = A[5];
B[5] = A[4];
B[4] = A[3];
B[3] = A[2];
B[2] = A[1];
B[1] = A[0];
B[0] = 0;
end
1'b1:
/* right shift A by 1 */
begin
B[7] = 0;
B[6] = A[7];
B[5] = A[6];
B[4] = A[5];
B[3] = A[4];
B[2] = A[3];
B[1] = A[2];
B[0] = A[1];
end
endcase
end
endmodule
Vengo de un fondo en C, y todo lo que me interesa es proporcionar y usar la abstracción, que claramente falta en este módulo. Aunque esto se sintetiza correctamente, no es muy atractivo para el ojo. También he creado un módulo de cambio de 4 bits y deseo usarlos. Sin embargo, siempre que trato de usarlos en el bloque siempre, me da un problema.
¿Hay alguna manera de modificar el código que he escrito y usar el módulo de cambio de 4 bits y no afectar a la síntesis general? En general, ¿hay alguna regla que deba seguir para obtener un código de calidad de verilog o se trata de la síntesis?
Mejor, Bilal