Я пытаюсь написать код 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
Если входы не подписаны? – Morgan
@Morgan Sir Я думаю, что нет необходимости в подписанных входах ... поскольку мы проверяем rad81, rad31 ... так далее. – user4611785
Я не понимаю, как мы проверяем. У вас есть 'rad81 = sum81-sum80' и' sum8x = rad81 ;, где LHS подписан, а RHS - без знака. Если входные данные содержат подписанные значения, они должны быть объявлены как подписанные, если не тогда 'sum8x = rad81;' не будет работать, так как большое положительное число станет отрицательным числом. – Morgan