Я делаю декодер для FPGA. Код Verilog компилируется, но переключатели ничего не делают. Я четырежды проверил назначение контактов, и они верны, поэтому я предполагаю, что в моем коде есть некоторые логические проблемы.
Таблица истинности:
enable p a1 a0 y0 y1 y2 y3
0 0 0 0 1 0 0 0
0 0 0 1 0 1 0 0
0 0 1 0 0 0 1 0
0 0 1 1 0 0 0 1
0 1 0 0 0 1 1 1
0 1 0 1 1 0 1 1
0 1 1 0 1 1 0 1
0 1 1 1 1 1 1 0
1 x x x x z z z
Это мой код:
module decoder2x4(
input enable,
input p,
input [1:0] a,
output [3:0] y
);
assign y[0] = (( ~p & ~a[1] & ~a[0]) | (~a[1] & a[0]) |(a[1] & ~a[0]) | ( p & a[1] & a[0]) ) & ~enable;
assign y[1] = (( ~p & ~a[1] & a[0]) | ( p & ~a[1] & ~a[0]) |( p & a[1] & ~a[0])| ( p & a[1] & a[0])) & ~enable;
assign y[2] = (( ~p & a[1] & ~a[0]) | ( p & ~a[1] & ~a[0]) |( p & ~a[1] & a[0])| ( p & a[1] & a[0])) & ~enable;
assign y[3] = (( ~p & a[1] & a[0]) | ( p & ~a[1] & ~a[0]) |( p & ~a[1] & a[0])| ( p & a[1] & ~a[0])) & ~enable;
endmodule
1 ответ
Это не то, как вы используете код HDL, если это не школьное задание.
Я скопировал это из работы, которую Пьер.Вриенс сделал для вас:
enable p a1 a0 y0 y1 y2 y3
0 0 0 0 1 0 0 0
0 0 0 1 0 1 0 0
0 0 1 0 0 0 1 0
0 0 1 1 0 0 0 1
0 1 0 0 0 1 1 1
0 1 0 1 1 0 1 1
0 1 1 0 1 1 0 1
0 1 1 1 1 1 1 0
1 x x x x z z z <<< Probably a typo here
Нижняя строка немного особенная, поэтому я использую для этого if
. Сброс мы можем поместить в случае:
always @( * )
begin
if (enable)
{y0, y1, y2, y3} = 4'hz; // **
else
case ( {p, a1, a0 } )
3'b000 : {y0, y1, y2, y3} = 4'b1000;
3'b001 : {y0, y1, y2, y3} = 4'b0100;
3'b010 : {y0, y1, y2, y3} = 4'b0010;
3'b011 : {y0, y1, y2, y3} = 4'b0001;
3'b100 : {y0, y1, y2, y3} = 4'b0111;
3'b101 : {y0, y1, y2, y3} = 4'b1011;
3'b110 : {y0, y1, y2, y3} = 4'b1101;
3'b111 : {y0, y1, y2, y3} = 4'b1110;
endcase
end // always
Обратите внимание, что это максимально копирует исходную таблицу, что снижает вероятность ошибок. Редактор с редактированием столбцов очень помогает!
** Я предполагаю, что вы хотите, чтобы все выходы были 'z'. В вашей таблице у вас есть xzzz.
Похожие вопросы
Новые вопросы
boolean
Булев тип данных - это тип данных только с двумя возможными значениями: true или false.