Я работаю над программой Verilog, которая должна добавить подписанный 8-битный вход на 16-разрядный вывод при каждом такте и сбросить при получении сигнала сброса. Часть добавления работает нормально, и даже добавление отрицательного значения 1 работает, но я получаю странные результаты в моделировании для чисел, меньших этого. Прошло около года с тех пор, как я в последний раз использовал Verilog, и, несмотря на все, что я могу придумать, я не знаю, в чем проблема. Вот что у меня есть, насколько код:Verilog Signed Addition Ошибка вычитания
module varcount (clk, reset, in, out);
input clk, reset;
input [7:0] in;
output reg [15:0] out;
reg [15:0] temp;
reg [15:0]count;
parameter X=1000000;
always @ (posedge clk)
begin
if (in[7] == 1)
begin
temp = 16'b00000000000000001 + !in;
count = count - temp;
if (reset)
begin
count = 0;
out = 0;
end
out = count;
end
else
begin
count = count + in;
if (reset)
begin
count = 0;
out = 0;
end
out = count;
end
end
endmodule
Вот мой вход моделирования:
И вот вывод, который я получаю.
Похоже Прямодушная ошибки в моей программе, но я не могу идентифицировать.
Добро пожаловать в StackOverflow. Трудно прочитать ваш код, потому что вы не отделили его должным образом. Вы также не показываете, что вы ожидаете быть правильным результатом по сравнению с фактическим результатом. –