МАРСОХОД

Open Source Hardware Project

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1

ТЕМА: Преобразователь позиционного кода в двоичный

Преобразователь позиционного кода в двоичный 5 года 7 мес. назад #1621

  • Masterix
  • 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

или можно как то иначе?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Преобразователь позиционного кода в двоичный 5 года 7 мес. назад #1622

Не знаю как можно еще, в верилоге не силен, но в вашем коде есть ошибка
Начинаться дожно с " 12'H001: bin=4'b000; "

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Преобразователь позиционного кода в двоичный 5 года 7 мес. назад #1623

  • Masterix
  • 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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Преобразователь позиционного кода в двоичный 5 года 7 мес. назад #1624

Вы меня неправильно поняли. Кстати, во втором способе - таже ошибка.
Бинарному коду "0000" досжна соответствовать "1" в младшем разряде "dec" или "key".

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Преобразователь позиционного кода в двоичный 5 года 7 мес. назад #1625

  • Masterix
  • Masterix аватар Автор темы
  • Не в сети
  • Захожу иногда
  • Захожу иногда
  • Сообщений: 65
  • Спасибо получено: 1

umarsohod пишет: Вы меня неправильно поняли. Кстати, во втором способе - таже ошибка.
Бинарному коду "0000" досжна соответствовать "1" в младшем разряде "dec" или "key".

Это не баг это фитча такая))) декодер нужен для кнопок 12шт и селектора если ни одна кнопка не нажата имеем 0000 если нажата кнопка 1 имеем 0001 и тд. Тоже если вместо кнопок селектор в положении выкл не один контакт не замкнут имеем 0000, в положении "1" имеем 0001 и тд, кстати второй способ для селектора предпочтительней если крутить селектор с первым кодом то имеем 0001,0000,0010,0000,0011 а со вторым 0001,0010,0011 и т.д. ну это еще конечно смотря какой селектор в моем случае селектор при переходе с одной позиции на другую перемыкает их потому с первым кодом получается перепрыгивание через дефолтное значение а со вторым кодом пока активен младший бит не сработает старший.

Я уверен что второй код можно более изящно написать, но я не знаю как.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Masterix.

Re: Преобразователь позиционного кода в двоичный 4 года 3 мес. назад #2699

Твой код можно написать через блок 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

Кстати попробуй нажать одновременно пару кнопок, и ты кое что увидишь новое :))

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от tomas111.
  • Страница:
  • 1
Время создания страницы: 0.157 секунд

facebook  GitHub  YouTube  Twitter
Вы здесь: Начало Forum Наш форум Языки программирования Преобразователь позиционного кода в двоичный