Desplazar hacia la izquierda por número personalizado

0

Tengo una matriz de puntos de 5 * 7 en mi FPGA, y necesito "caminar" un punto. El data tiene una longitud de 35 bits, y solo un bit debe ser 1 (visible). El punto superior derecho es (0; 0), el inferior izquierdo es data[34] . El problema es que no puedo entender cómo debo cambiar un '1' a la posición especificada.

reg [34:0] data;
reg [ 2:0] x, y;

always @ (posedge clk16M) begin
    if (rst) begin
        x    <= 3'b0;
        y    <= 3'b0;
        data <= 35'b1;
    end

    .. calculate x and y ..  

end

always @ (*) begin
    data <= 35'b1 << (x * 3'd7 + y);
end

No mueve el punto, sin embargo, los valores de x y y están bien. Cambian cuando deberían.

    
pregunta klenium

2 respuestas

1
always @ (*) begin
    data <= 35'b1 << (x * 3'd7 + y);
end

Creo que puede tener un problema de desbordamiento de enteros. Intentaría cambiar 3'7 a 6'7 para asegurarme de que los cálculos se realicen con valores suficientemente amplios. (No estoy seguro de cuáles son las reglas de Verilog con respecto a los tamaños de operación en expresiones complejas como esta)

También me gustaría deshacerme de los "datos < = 35'b1;" En el primer bloque siempre. Solo debes configurar cada señal en un bloque siempre.

    
respondido por el Peter Green
0

Usar una matriz bidimensional sería una opción más fácil y mejor. por ejemplo algo como reg [6: 0] datos [0: 4];

y utilice las variables x e y directamente para colocar los datos de bits [x] [y] con x = 0 e y = 0 sería el punto de datos (0,0).

    
respondido por el K.Rami

Lea otras preguntas en las etiquetas