Говорим о высоком.......о VHDL!, Вопросы ответы...примеры |
Здравствуйте, гость ( Вход | Регистрация )
Говорим о высоком.......о VHDL!, Вопросы ответы...примеры |
14.12.2005 - 19:32
Вставить ник | Быстрая цитата | Сообщение
#21
|
|
Новичок Группа: Участник Сообщений: 9 Регистрация: 3.02.2005 Пользователь №: 6423 |
Здраствуйте господа....
простите что так долго не было слышно....просто на работе завал полный...... нужна кстате помощь может кто знает как сделать извращенный щетчик..... смысл такой этим счетчиком формируются адреса чтения....ну это в принципе вам ни к чему..... Значит так нучно написать цикл.....так чтобы счетчик считал сперва от 0 до 255 затем с 16 до 271 потом с 32 до......ну в общем смысл понятен к первому просто +16...... Описать просто используя if........ if res='1' then ard<=(others '0'); elsif zapros ='1' then ard <= ard +"16(в двоичном виде)"; elsif clk'event and clk='1' tnen if.........then ard<= ard+'1'; end if; end if; |
|
|
Guest_Укуренный_идиот_* |
14.12.2005 - 19:54
| Быстрая цитата | Сообщение
#22
|
Гости |
Хм... На ВХДЛ не могу подсказать... Могу выдать то, что родилось в мозгу за 10 минут и на верилоге:
Код module counter(clk,data,reset,result) input clk,data,reset; output [15:0] result; reg [15:0] result; reg [7:0] temp; reg [7:0] Iteration; always @ (posedge clk or posedge reset) begin if (reset) temp=0; else begin if (temp==255) Iteration=Iteration+1; else temp=temp+1; end end always @ (posedge clk) result = temp+16*Iteration; endmodule Пара мест, безусловно, спорные, нету у меня под руками тулов никаких |
|
|
15.12.2005 - 23:58
Вставить ник | Быстрая цитата | Сообщение
#23
|
|
Частый гость Группа: Участник Сообщений: 167 Регистрация: 26.10.2003 Пользователь №: 641 |
module counter(clk,reset,result)
input clk,reset; output [15:0] result; reg [15:0] result; reg [7:0] temp; reg [7:0] Iteration; initial begin Iteration=16'b0; temp=16'b0; result=16'b0; end always @ (posedge clk or posedge reset) begin if (reset) temp=16'b0; // двоичный адрес else begin if (temp==16'b1111111111111111+16'b0000000000100000*Iteration) //уверен в это месте Iteration<=Iteration+1'b1; else temp<=temp+1'b1; end result <= temp+16'b0000000000100000*Iteration; end endmodule Пример может не работать не проверял (дома писал). Как я понял из задания. Нижняя и верхния границы увеличиваются на 5'b10000, когда сумма становиться больше 255+5'b10000. Тогда не понятно, где граница счетчика? Сообщение отредактировано Лев - 16.12.2005 - 00:02 |
|
|
16.12.2005 - 23:44
Вставить ник | Быстрая цитата | Сообщение
#24
|
|
Новичок Группа: Участник Сообщений: 6 Регистрация: 24.12.2004 Пользователь №: 5924 |
Не совсем ясно оговорены условия задачи - диапазон счетчика, нужен ли счетчик синхронный или асинхронный?
Если не вникать в тонкости, то почти синхронный вариант я бы написал так: constant N: integer := ??; signal addr: std_logic_vector (N-1 downto 0); signal addr1: std_logic_vector (7 downto 0); signal addr2: std_logic_vector (N-1 downto 4); ... process (clk,rst) begin if rst = '1' then addr1 <= (others => '0'); addr2 <= (others => '0'); elsif rising_edge(clk) then addr1 <= addr1 + x"01"; if addr1 = x"ff" then addr2 <= addr2 + CONV_STD_LOGIC_VECTOR(1,addr2'length); end if; end if; addr <= EXT(addr1,addr'length) + (addr2 & "0000"); end process; В этом варианте получается три сумматора. Если нужен совсем синхронный вариант - то нужно присвоение сигнала addr поместить в процесс. Возможны варианты более подходящие для Вашей задачи. Если быстродействие не критично, можно реализовать два асинхронных счетчика и просуммировать их значения. |
|
|
17.12.2005 - 11:46
Вставить ник | Быстрая цитата | Сообщение
#25
|
|
Новичок Группа: Участник Сообщений: 9 Регистрация: 3.02.2005 Пользователь №: 6423 |
Пекрасно.....темы снова зашевилились.......PIPEN респек......что касаемо счетчика просто у нас щас проект в еотором мне нужно было формировать адреса в память вот этим извратным счетчиком.....но мы решили реализовать другое исполнение памяти и соответственно адресса будут теперь совершенно другие.....
Давайте теперь поговорим......о памяти......типо FIFO.......задача стоит такая с Видеопроцессора который выдает опорные Р(16*16) и текущие кадры I(16*16) загнать в буффер типо ФИФО и потом слить в память 48*48.... Внимание вопросы.... 1. Какой размерности вы сделаете буффер 2.Вот это уже интереснее....сделать нужно признак заполенения буффера....ну понятно обычный счетчик типо насчитал что все заполнено и сигнал назовем его full='1'......но потом когда первые данные выйдут из буффера он будет уже не полным следовательно счеткик долден начать вычетаь.....и сигнал full='0'......предложите пример реализации такого счетчика...... Все пожалуй хватитна на какоето время людям кто любит подумать.... С наступающим кстате голспода...... |
|
|
19.02.2006 - 01:11
Вставить ник | Быстрая цитата | Сообщение
#26
|
|
Продвинутый новичок Группа: Участник Сообщений: 61 Регистрация: 24.02.2005 Пользователь №: 6760 |
Сталкнулся с XILINX, кто нибуть может подкинуть литературу (или любую другую инфу) по этому делу?
|
|
|
14.05.2006 - 10:06
Вставить ник | Быстрая цитата | Сообщение
#27
|
|
Частый гость Группа: Участник Сообщений: 290 Регистрация: 22.08.2005 Пользователь №: 9408 |
Вопрос такой: я описал интерфейс некоего элемента (допустим nor3), у которого вход является bit_vector'ом (1 to 3), выход y:bit:
entity nor3 is port(x: in bit_vector(1 to 3); y: out bit); end nor3; потом я включил этот элемент как component в архитектурное тело созданной мною схемы: component nor3 port(x: in bit_vector(1 to 3); y: out bit); end component; и после begin создал элемент: D: nor3 port map (x1, x2, x3, y); при компиляции получаю сообщение "Too many actuals in association list" тоесть получается что к бит-вектору размера n можно "присоединять" только бит-вектор размера n, но нельзя подсоединять n отдельных битовых сигналов, но препод в институте говорит что можно, но не говорит как. Может кто знает как? Сообщение отредактировано Лейванах - 14.05.2006 - 10:09 |
|
|
13.05.2007 - 19:48
Вставить ник | Быстрая цитата | Сообщение
#28
|
|
Постоялец форума Группа: Участник Сообщений: 912 Регистрация: 6.08.2005 Пользователь №: 9235 |
нужна помощь - а именно - необходимо вменяемое и рабоающее описание dcrtt триггера
такого вот как ]]>здесь]]> проблема в следующем - моделируются три тела но работает только поведенческое(тамгде непосредственно входы связаны с выходами) остальные - молчат(на выходе по нулям) более деталтный анализ показал,что сигнал проходит элемент "2И-НЕ" и инвертор после него, далее попав в триггер - он не выходит. так что думаю проблема именно тут. Сообщение отредактировано Vermut - 13.05.2007 - 19:48 |
|
|
25.11.2007 - 17:52
Вставить ник | Быстрая цитата | Сообщение
#29
|
|
Продвинутый новичок Группа: Участник Сообщений: 68 Регистрация: 1.10.2003 Пользователь №: 199 |
Привет всем! Очень нужна помощь! Делаю лабу по МПСиС в Max Pluse II, задание сделать sin(x/2), есть написанный проект на vhdl, но при компиляции в Max plus выдает ошибку Library error: primary unit "numeric_std" denoted by prefix "ieee" must exist in the library. Зайдя в эту библиотеку я поняла что пакета numeric_std там нет. Я скачала этот пакет из интернета(вставила этот файл в папку ieee), но ошибка все равно остается. Кто-нибудь знает что с этим делать?
P.S. Последняя лаба на этой неделе, а продвижений никаких. |
|
|
Текстовая версия | Сейчас: 23.04.2024 - 12:04 |