-
Masterix
-
Автор темы
-
Не в сети
-
Захожу иногда
-
-
Сообщений: 65
-
Спасибо получено: 1
-
-
-
-
|
Как сделать на verilog преобразователь позиционного кода в двоичный(декодер наоборот)
Вот так?
module encoder(
input wire [11:0]dec,
output reg [3:0]bin
);
always @*
begin
case(dec)
12'H000: bin=4'b0000;
12'H001: bin=4'b0001;
12'H002: bin=4'b0010;
12'H004: bin=4'b0011;
12'H008: bin=4'b0100;
12'H010: bin=4'b0101;
12'H020: bin=4'b0110;
12'H040: bin=4'b0111;
12'H080: bin=4'b1000;
12'H100: bin=4'b1001;
12'H200: bin=4'b1010;
12'H400: bin=4'b1011;
12'H800: bin=4'b1100;
default:
bin=4'b0000;
endcase
end
endmodule
или можно как то иначе?
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
umarsohod
-
-
Не в сети
-
Администрация форума
-
-
Сообщений: 816
-
Спасибо получено: 168
-
-
|
Не знаю как можно еще, в верилоге не силен, но в вашем коде есть ошибка
Начинаться дожно с " 12'H001: bin=4'b000; "
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
Masterix
-
Автор темы
-
Не в сети
-
Захожу иногда
-
-
Сообщений: 65
-
Спасибо получено: 1
-
-
-
-
|
Да, вы правы одна строчка лишняя, но похоже компилятору все равно на нее, потому и не заметил. Я в верилоге совсем начинающий. Вот так еще можно. module btns_12(
input wire [11:0]key,
output wire pr,
output reg [3:0] bin
);
always @*
begin
if(~key[0])
bin <= 4'b0001;
else
if(~key[1])
bin <= 4'b0010;
else
if(~key[2])
bin <= 4'b0011;
else
if(~key[3])
bin <= 4'b0100;
else
if(~key[4])
bin <= 4'b0101;
else
if(~key[5])
bin <= 4'b0110;
else
if(~key[6])
bin <= 4'b0111;
else
if(~key[7])
bin <= 4'b1000;
else
if(~key[8])
bin <= 4'b1001;
else
if(~key[9])
bin <= 4'b1010;
else
if(~key[10])
bin <= 4'b1011;
else
if(~key[11])
bin <= 4'b1100;
else
bin <= 4'b0000;
end
assign pr = key[0]& key[1]& key[2]& key[3]& key[4]& key[5]& key[6]& key[7]& key[8]& key[9]& key[10]& key[11];
endmodule
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
umarsohod
-
-
Не в сети
-
Администрация форума
-
-
Сообщений: 816
-
Спасибо получено: 168
-
-
|
Вы меня неправильно поняли. Кстати, во втором способе - таже ошибка.
Бинарному коду "0000" досжна соответствовать "1" в младшем разряде "dec" или "key".
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
Masterix
-
Автор темы
-
Не в сети
-
Захожу иногда
-
-
Сообщений: 65
-
Спасибо получено: 1
-
-
-
-
|
umarsohod пишет: Вы меня неправильно поняли. Кстати, во втором способе - таже ошибка.
Бинарному коду "0000" досжна соответствовать "1" в младшем разряде "dec" или "key".
Это не баг это фитча такая))) декодер нужен для кнопок 12шт и селектора если ни одна кнопка не нажата имеем 0000 если нажата кнопка 1 имеем 0001 и тд. Тоже если вместо кнопок селектор в положении выкл не один контакт не замкнут имеем 0000, в положении "1" имеем 0001 и тд, кстати второй способ для селектора предпочтительней если крутить селектор с первым кодом то имеем 0001,0000,0010,0000,0011 а со вторым 0001,0010,0011 и т.д. ну это еще конечно смотря какой селектор в моем случае селектор при переходе с одной позиции на другую перемыкает их потому с первым кодом получается перепрыгивание через дефолтное значение а со вторым кодом пока активен младший бит не сработает старший.
Я уверен что второй код можно более изящно написать, но я не знаю как.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
tomas111
-
-
Не в сети
-
Осваиваюсь на форуме
-
-
Сообщений: 20
-
Спасибо получено: 0
-
-
|
Твой код можно написать через блок case (мультиплексор) с параметром defaut ... для 12 хватит 4 битов
begin
case(dec)
4'h0: bin=4'b0000;
4'h1: bin=4'b0001;
4'h2: bin=4'b0010;
4'h3: bin=4'b0011;
4'h4: bin=4'b0100;
4'h5: bin=4'b0101;
4'h6: bin=4'b0110;
4'h7: bin=4'b0111;
4'h8: bin=4'b1000;
4'h9: bin=4'b1001;
4'ha: bin=4'b1010;
4'hb: bin=4'b1011;
default: bin=4'b0000;
endcase
Кстати попробуй нажать одновременно пару кнопок, и ты кое что увидишь новое :))
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
Время создания страницы: 0.157 секунд