Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Говорим о высоком.......о VHDL!, Вопросы ответы...примеры
BMW
сообщение 14.12.2005 - 19:32

Новичок
*

Группа: Участник
Сообщений: 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

Пара мест, безусловно, спорные, нету у меня под руками тулов никаких smile.gif
Перейти в начало страницы
 
+Цитировать сообщение
Лев
сообщение 15.12.2005 - 23:58

Частый гость
***

Группа: Участник
Сообщений: 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
Перейти в начало страницы
 
+Цитировать сообщение
pipen
сообщение 16.12.2005 - 23:44
Новичок
*

Группа: Участник
Сообщений: 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 поместить в процесс.

Возможны варианты более подходящие для Вашей задачи. Если быстродействие не критично, можно реализовать два асинхронных счетчика и просуммировать их значения.
Перейти в начало страницы
 
+Цитировать сообщение
BMW
сообщение 17.12.2005 - 11:46

Новичок
*

Группа: Участник
Сообщений: 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

Продвинутый новичок
**

Группа: Участник
Сообщений: 61
Регистрация: 24.02.2005
Пользователь №: 6760


Сталкнулся с XILINX, кто нибуть может подкинуть литературу (или любую другую инфу) по этому делу?
Перейти в начало страницы
 
+Цитировать сообщение
Лейванах
сообщение 14.05.2006 - 10:06

Частый гость
***

Группа: Участник
Сообщений: 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
Перейти в начало страницы
 
+Цитировать сообщение
Vermut
сообщение 13.05.2007 - 19:48

Постоялец форума
*****

Группа: Участник
Сообщений: 912
Регистрация: 6.08.2005
Пользователь №: 9235


нужна помощь - а именно - необходимо вменяемое и рабоающее описание dcrtt триггера
такого вот как ]]>здесь]]>
проблема в следующем - моделируются три тела
но работает только поведенческое(тамгде непосредственно входы связаны с выходами)
остальные - молчат(на выходе по нулям)
более деталтный анализ показал,что сигнал проходит элемент "2И-НЕ" и инвертор после него, далее попав в триггер - он не выходит.
так что думаю проблема именно тут.

Сообщение отредактировано Vermut - 13.05.2007 - 19:48
Перейти в начало страницы
 
+Цитировать сообщение
slide
сообщение 25.11.2007 - 17:52
Продвинутый новичок
**

Группа: Участник
Сообщений: 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. Последняя лаба на этой неделе, а продвижений никаких.
Перейти в начало страницы
 
+Цитировать сообщение

2 страниц V  < 1 2
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 23.04.2024 - 12:04