реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Помогите сделать дешифратор, На ПЛИСе
Павел34
сообщение Mar 9 2010, 13:53
Сообщение #1





Группа: Участник
Сообщений: 5
Регистрация: 9-03-10
Пользователь №: 55 869



Нужна помощь. Благодаря своей недальновидности, уже сделал устройство, в котором стоит ПЛИС EPM7064STC100-10. С прошивкой думал разберусь, однако не получается. В общем надо сделать дешифратор 52в6. На одном из 52 входов появлется низкий уровень соответственно на выходе в двоичном коде надо получить номер входа с низким уровнем.
Заданием обычной таблицы не получается скомпилировать
Цитата
SUBDESIGN upr_kommutator
(
in1[51..0] : INPUT;
out[5..0] : OUTPUT;
)
BEGIN
TABLE
in1[] => out[];
B"0111111111111111111111111111111111111111111111" => B"000001";


Подскажите как сделать, горю!!!
Go to the top of the page
 
+Quote Post
des333
сообщение Mar 9 2010, 18:48
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Павел34:

У Вас не дешифратор, а шифратор.

http://depositfiles.com/ru/files/5145468


http://www.google.com/codesearch?hl=ru&...%B8%D1%81%D0%BA
http://www.google.com/codesearch?hl=ru&...%B8%D1%81%D0%BA

Не нужно создавать одну тему в разных ветках.

http://electronix.ru/forum/index.php?showtopic=73772


--------------------
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 9 2010, 19:09
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



если на AHDL, судя по корневому посту, то как-то так:

for i in 0 to 51 generate
if (!indata[i]) then
out = i;
end if;
end generate;

ну доработать слегка, если может быть более чем один ноль на входе, чтобы шифратор стал приоритетный.
Go to the top of the page
 
+Quote Post
Павел34
сообщение Mar 9 2010, 19:15
Сообщение #4





Группа: Участник
Сообщений: 5
Регистрация: 9-03-10
Пользователь №: 55 869



Цитата(des333 @ Mar 9 2010, 21:48) *


Верное замечание. В примерах только небольшая разрядность. У меня в том то и загвоздка, что не компиляет из-за большого количества разрядов =(

Цитата(SM @ Mar 9 2010, 22:09) *
если на AHDL, судя по корневому посту, то как-то так:

for i in 0 to 51 generate
if (!indata[i]) then
out = i;
end if;
end generate;

ну доработать слегка, если может быть более чем один ноль на входе, чтобы шифратор стал приоритетный.


Спасибо, а не скажете, в параллельный никак не получится?
Go to the top of the page
 
+Quote Post
x736C
сообщение Mar 9 2010, 19:27
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Цитата(Павел34 @ Mar 9 2010, 20:59) *
На одном из 52 входов появлется низкий уровень соответственно на выходе в двоичном коде надо получить номер входа с низким уровнем.
Насколько быстро должен появляться двоичный код?
Go to the top of the page
 
+Quote Post
Павел34
сообщение Mar 9 2010, 19:29
Сообщение #6





Группа: Участник
Сообщений: 5
Регистрация: 9-03-10
Пользователь №: 55 869



Это обработка клавиш, поэтому задержка в миллисекунды не критична
Go to the top of the page
 
+Quote Post
x736C
сообщение Mar 9 2010, 19:32
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



1. Какая тактовая частота?
2. Двойное нажатие неактуально, верно?
Go to the top of the page
 
+Quote Post
des333
сообщение Mar 9 2010, 19:39
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(SM @ Mar 9 2010, 22:09) *
если на AHDL, судя по корневому посту, то как-то так:

for i in 0 to 51 generate
if (!indata[i]) then
out = i;
end if;
end generate;

ну доработать слегка, если может быть более чем один ноль на входе, чтобы шифратор стал приоритетный.


Лучше на Verilog - там сразу приоритетный.  smile.gif


--------------------
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 9 2010, 19:53
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Павел34 @ Mar 9 2010, 22:15) *
Спасибо, а не скажете, в параллельный никак не получится?

Не скажу, так как поставлен таким вопросом в тупик. Поясните, что значит параллельный.
Go to the top of the page
 
+Quote Post
des333
сообщение Mar 9 2010, 19:53
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Код
`define VAR1

module tq(
  input         clk_i,
  input         rst_i,
  input  [15:0] in_i,
  output [3:0]  out_o
);

logic [15:0] in;
logic [3:0]  out;

always_ff @(posedge clk_i, posedge rst_i)
  if(rst_i)
    in <= '0;
  else
    in <= in_i;  


`ifdef VAR1

always_comb
  begin
    out = 4'b0000;
    casex (in)
        16'bxxxxxxxxxxxxxxx1: out = 4'b0000;
        16'bxxxxxxxxxxxxxx10: out = 4'b0001;
        16'bxxxxxxxxxxxxx100: out = 4'b0010;
        16'bxxxxxxxxxxxx1000: out = 4'b0011;
        16'bxxxxxxxxxxx10000: out = 4'b0100;
        16'bxxxxxxxxxx100000: out = 4'b0101;
        16'bxxxxxxxxx1000000: out = 4'b0110;
        16'bxxxxxxxx10000000: out = 4'b0111;
        16'bxxxxxxx100000000: out = 4'b1000;
        16'bxxxxxx1000000000: out = 4'b1001;
        16'bxxxxx10000000000: out = 4'b1010;
        16'bxxxx100000000000: out = 4'b1011;
        16'bxxx1000000000000: out = 4'b1100;
        16'bxx10000000000000: out = 4'b1101;
        16'bx100000000000000: out = 4'b1110;
        16'b1000000000000000: out = 4'b1111;
    endcase
  end
  
`else

always_comb
  begin
    out = 4'b0000;
    for(int i = 15; i>=0; i--)
      if(in[i])
        out = i;    
  end
  
`endif


always_ff @(posedge clk_i, posedge rst_i)
  if(rst_i)
    out_o <= '0;
  else
    out_o <= out;  


endmodule


Хм... Странно - второй вариант и меньше по ресурсам и частота выше. smile.gif


--------------------
Go to the top of the page
 
+Quote Post
Павел34
сообщение Mar 9 2010, 19:59
Сообщение #11





Группа: Участник
Сообщений: 5
Регистрация: 9-03-10
Пользователь №: 55 869



двойное нажатие пофик.

у меня 52 входа(нажата одна из клавиш только может быть, а если несколько, то пофик, пусть сработает любая из нажатых) и шесть выходов, которые по плану в двоичном коде должны загружать в мк номер нажатой клавиши.
Go to the top of the page
 
+Quote Post
x736C
сообщение Mar 9 2010, 20:09
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



По «плану» или по фронту-отсчету-сигналу и т. п.?

И все 52 кнопки на 52 вывода..
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 9 2010, 20:09
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Павел34 @ Mar 9 2010, 22:59) *
у меня 52 входа(нажата одна из клавиш только может быть, а если несколько, то пофик, пусть сработает любая из нажатых) и шесть выходов, которые по плану в двоичном коде должны загружать в мк номер нажатой клавиши.


Так я Вам это и написал в 6-ти строчках с generate. Правда при одновременном нажатии на выходе будет логическое ИЛИ кодов всех одновременно нажатых клавиш.
Go to the top of the page
 
+Quote Post
sazh
сообщение Mar 9 2010, 20:19
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(Павел34 @ Mar 9 2010, 22:15) *
Верное замечание. В примерах только небольшая разрядность. У меня в том то и загвоздка, что не компиляет из-за большого количества разрядов =(


Значит и генерейтом не уложится.

Слепите сначала на 32. Потом на 20. если превысит 32, к полученному 32 прибавлять. Должно в 64 ячейки уложиться.
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 9 2010, 20:23
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(sazh @ Mar 9 2010, 23:19) *
Должно в 64 ячейки уложиться.

По любому должно, главное не забыть проверить, что параллельные экспандеры разрешены в настройках синтезатора-маппера-фиттера.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th July 2025 - 01:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01488 секунд с 7
ELECTRONIX ©2004-2016