2015-04-03 4 views
0

Я пытаюсь написать код Verilog для вычитания rns, в котором я использовал операцию modulo. Ниже приведены в коде я принимать входной сигнал sum80 = 6'd4 sum81 = 6'd6 sum30 = 6'd1 sum31 = 6'd4 sum71 = 6'd2 sum70 = 6'd3 sum50 = 6'd2 sum51 = 6'd1verilog код вычитания rns

но в соответствии с этим rad71 = -1 и rad51 = -1, но после моделирования он дает rad71 = rad51 = 1111111, что хорошо, но в выходной сумме 7x должно быть равно (sum7x = 6) и (sum5x = 4), но я получаю (sum5x = 0000110) и (sum7x = 0001000)

Я хочу, чтобы он считал rad71 = rad51 = -1 и sum5x = m5 (7'd5) -rad51 = 4 ... Как это сделать ..... какие изменения я должен внести в нашем коде

module mod_sub1(clk,rst,sum80,sum81,sum30,sum31,sum71,sum70,sum50,sum51,sum8x,sum3x,sum5x,sum7x,rad81,rad31,rad51,rad71); 

parameter m3=6'b000011,m5=6'b000101,m7=6'b000111,m=13'd840,m8=6'b001000; 
input clk; 
input rst; 
input [5:0] sum80,sum81,sum30,sum31,sum71,sum70,sum50,sum51; 
output reg signed [6:0] sum8x,sum3x,sum5x,sum7x; 
output reg signed [6:0] rad81,rad31,rad51,rad71; 


[email protected](posedge clk) 
begin 
    rad81=sum81-sum80; 
    if (rad81<0) 
     sum8x=(m8-rad81); 
    else 
     sum8x=rad81; 
    end 

[email protected](posedge clk) 
begin 
    rad31=sum31-sum30; 
     if (rad81<0) 
     sum3x=(m3-rad31); 
    else 
     sum3x=rad31; 
    end 

    [email protected](posedge clk) 
begin 
    rad71=sum71-sum70; 
    if (rad71<0) 
     sum7x=(m7-rad71); 
    else 
     sum7x=rad71; 
    end 


[email protected](posedge clk) 
begin 
    rad51=sum51-sum50; 
    if (rad51<0) 
     sum5x=(m5-rad51); 
    else 
     sum5x=rad51; 
    end 



endmodule 
+0

Если входы не подписаны? – Morgan

+0

@Morgan Sir Я думаю, что нет необходимости в подписанных входах ... поскольку мы проверяем rad81, rad31 ... так далее. – user4611785

+0

Я не понимаю, как мы проверяем. У вас есть 'rad81 = sum81-sum80' и' sum8x = rad81 ;, где LHS подписан, а RHS - без знака. Если входные данные содержат подписанные значения, они должны быть объявлены как подписанные, если не тогда 'sum8x = rad81;' не будет работать, так как большое положительное число станет отрицательным числом. – Morgan

ответ

0

(rad31 мод 3) является rad31 + (-) 3, а не 3 - rad31

+0

Можете ли вы объяснить, как вы получили ответ, который у вас есть. Какова его логика? – MZaragoza

+0

«Логика позади» - http://en.wikipedia.org/wiki/Modular_arithmetic. Когда вы хотите по модулю чего-то, вы добавляете или вычитаете модуль до получения значения в диапазоне (0, модуль-1) –

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