2016-01-25 3 views
-1

Мне нужно найти нужную часть целого числа. Таким образом, я могу найти оставшуюся часть значения, деленное на 10 (т. Е.) A = rem (Num1,10); в Matlab .. Как сделать то же самое с Verilog. У меня есть Xilinx 14,1 и 9,1 ..Поиск остатка с использованием деления 10

+0

Не могли бы вы объяснить, что вы делали до сих пор? – Phani

+0

Для переменной упакованного массива типа 'reg [7: 0] a', LSB, самый правый бит можно нарезать просто как' a [0] '. Пожалуйста, проясните намерение. – rahulcodesinverilog

+0

Как и в вашем другом вопросе, я бы не говорил о битах здесь, а цифры. Вам нужна наименее значимая цифра. –

ответ

0

% является оператором модуля в Verilog, так же, как в C

глядя на комментарии, похоже, что вы хотите сделать функцию округления: здесь что-то, что будет делать :

Одно примечание: код ниже будет ОЧЕНЬ неэффективен, так как% стоит дорогого оборудования. Рассмотрим деление на 2, например 8 или 16 вместо 10.

module round 
(
    input wire[31:0] x, 
    output reg[31:0] rounded 
); 

    reg[31:0] remainder; 

    always @(*) begin 

     // % operator is VERY slow and expensive!!! 
     remainder = (x % 32'd10); 

     // the lines below are decently efficient 
     if (remainder < 32'd5) 
      rounded = x - remainder; 
     else 
      rounded = x + (32'd10 - remainder); 

    end 


endmodule 
+0

Сэр говорит, error "Operator% поддерживается только тогда, когда второй операнд имеет значение 2." –

Смежные вопросы