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

 
 
> Cyclone IV Logic Element, Использование ресурсов ячейки
Dootch
сообщение Apr 15 2014, 06:29
Сообщение #1


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

Группа: Свой
Сообщений: 76
Регистрация: 12-02-10
Из: Хабаровск
Пользователь №: 55 441



Добрый день.
Разработка ведется в среде Quartus 13.1 Web Edition для ПЛИС EP4CGX150CF23C7.
Мне необходимо собрать схему, представленную на прикрепленном рисунке (1). При этом я хочу использовать только один логический элемент. Если я правильно понял структуру логического элемента в Cyclone IV (рисунок 2), то это возможно.

Написанный мною код:

CODE
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_signed.all;
LIBRARY altera_mf;
USE altera_mf.altera_mf_components.all;

entity LUT_CELL is
port(
INPUT_1 : in STD_LOGIC;
INPUT_2 : in STD_LOGIC;
MUX : in STD_LOGIC;
CLK : in STD_LOGIC;
OUTPUT : out STD_LOGIC;
OUTPUT_D : out STD_LOGIC
);
end LUT_CELL;

architecture a of LUT_CELL is

signal int_INPUT_1 :std_logic;
signal int_INPUT_2 :std_logic;
signal int_MUX :std_logic;
signal int_OUT1 :std_logic;
signal int_OUT2 :std_logic;

component lut_input
port(
a_in : in std_logic;
a_out : out std_logic);
end component;

component lut_output
port(
a_in : in std_logic;
a_out : out std_logic);
end component;

COMPONENT DFFE

PORT (d : IN STD_LOGIC;
clk : IN STD_LOGIC;
clrn : IN STD_LOGIC;
prn : IN STD_LOGIC;
ena : IN STD_LOGIC;
q : OUT STD_LOGIC );

END COMPONENT;
begin


inp1:component lut_input
port map(INPUT_1,int_INPUT_1);
inp2:component lut_input
port map(INPUT_2,int_INPUT_2);
mxx:component lut_input
port map(MUX,int_MUX);
outp:component lut_output
port map(int_OUT1,int_OUT2);


int_OUT1<=(int_INPUT_1 and (not int_MUX))or(int_INPUT_2 and int_MUX);

OUTPUT<=int_OUT2;

dfff:component DFFE
port map(int_OUT2,CLK,'1','1','1',OUTPUT_D);

end a;


Компиляция проходит успешно, но в отчете пишется что задействовано 2 логических элемента (рисунок 3). Почему триггер берется из другого LE?
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
doom13
сообщение Apr 15 2014, 07:01
Сообщение #2


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Может из-за того что мегафункции используются. То же, что и у Вас:

Код
module mmux
(
    input clock,
    input in0,
    input in1,
    input addr,
    output out,
    output reg dout
);
    assign out = (addr) ? in1 : in0;
    
    always@(posedge clock) dout <= out;

endmodule


но занимает один элемент.


Сообщение отредактировал doom13 - Apr 15 2014, 07:10
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
SM
сообщение Apr 15 2014, 07:02
Сообщение #3


Гуру
******

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



потому что, на сколько я помню, из LUT нельзя вывести одновременно и комбинаторную ф-цию, и регистровую. Или, или. Поэтому, два варианта есть - вынести триггер в другой LE, или повторить логику в другой LUT.

Хотя, возможно, я и путаю семейства
Go to the top of the page
 
+Quote Post
Dootch
сообщение Apr 15 2014, 07:07
Сообщение #4


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

Группа: Свой
Сообщений: 76
Регистрация: 12-02-10
Из: Хабаровск
Пользователь №: 55 441



Цитата(doom13 @ Apr 15 2014, 10:01) *
Может из-за того что мегафункции используются. То же, что и у Вас:

module mmux
(
input clock,
input in0,
input in1,
input addr,
output out,
output reg dout
);

assign out = (addr) ? in1 : in0;

always@(posedge clock)begin
dout <= out;
end

endmodule

но занимает один элемент.



Ваш код выдает тот же результат.
Go to the top of the page
 
+Quote Post
doom13
сообщение Apr 15 2014, 07:12
Сообщение #5


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(Dootch @ Apr 15 2014, 10:07) *
Ваш код выдает тот же результат.


Добавил скрины, результат - одна ячейка.

Сообщение отредактировал doom13 - Apr 15 2014, 07:13
Go to the top of the page
 
+Quote Post
Dootch
сообщение Apr 15 2014, 07:21
Сообщение #6


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

Группа: Свой
Сообщений: 76
Регистрация: 12-02-10
Из: Хабаровск
Пользователь №: 55 441



Цитата(SM @ Apr 15 2014, 10:02) *
потому что, на сколько я помню, из LUT нельзя вывести одновременно и комбинаторную ф-цию, и регистровую. Или, или. Поэтому, два варианта есть - вынести триггер в другой LE, или повторить логику в другой LUT.

Хотя, возможно, я и путаю семейства


Если компилировать под Cyclone V GT, то проект помещается в одном ALM. Структура ALM посложнее будет, но возможно тут удастся реализовать 4 моих схемы в одном ALM.

Цитата(doom13 @ Apr 15 2014, 10:12) *
Добавил скрины, результат - одна ячейка.

Можно посмотреть ваши настройки Analysis & Synthesis Settings и Fitter Settings?

Сообщение отредактировал Dootch - Apr 15 2014, 07:22
Go to the top of the page
 
+Quote Post
doom13
сообщение Apr 15 2014, 07:28
Сообщение #7


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(Dootch @ Apr 15 2014, 10:18) *
Если компилировать под Cyclone V GT, то проект помещается в одном ALM. Структура ALM посложнее будет, но возможно тут удастся реализовать 4 моих схемы в одном ALM.


Выше прикрепил результат компиляции под Ваш кристал, у меня заняло одну ячейку (на Cyclone 5 так же одна).

Цитата(Dootch @ Apr 15 2014, 10:21) *
Если компилировать под Cyclone V GT, то проект помещается в одном ALM. Структура ALM посложнее будет, но возможно тут удастся реализовать 4 моих схемы в одном ALM.


Можно посмотреть ваши настройки Analysis & Synthesis Settings и Fitter Settings?



Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение


Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Dootch
сообщение Apr 15 2014, 07:44
Сообщение #8


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

Группа: Свой
Сообщений: 76
Регистрация: 12-02-10
Из: Хабаровск
Пользователь №: 55 441



Цитата(doom13 @ Apr 15 2014, 10:28) *
Выше прикрепил результат компиляции под Ваш кристал, у меня заняло одну ячейку (на Cyclone 5 так же одна).


Выставил Auto Fit вместо Standart Fit - все получилось.

Вопрос теперь в том как мне указать компилятору, что если я использую 100-10000 таких схем в проекте, то каждая должна лежать в одной ячейке? Может LogicLock мне в помощь, но кажется это несколько из другой оперы.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
doom13
сообщение Apr 15 2014, 08:11
Сообщение #9


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(Dootch @ Apr 15 2014, 10:44) *
Вопрос теперь в том как мне указать компилятору, что если я использую 100-10000 таких схем в проекте, то каждая должна лежать в одной ячейке? Может LogicLock мне в помощь, но кажется это несколько из другой оперы.


Компилятор сам положит каждую из схем в одну ячейку.
Код
module mmux_wrapper
#(
    parameter W = 64
)
(
    input clock,
    input [W-1:0] in0,
    input [W-1:0] in1,
    input addr,
    output [W-1:0] out,
    output [W-1:0] dout

);

    genvar i;
    
    generate
        for(i = 0; i < W; i = i + 1)begin : MMUX_BLOCK
            mmux (
                .clock(clock),
                .in0(in0[i]),
                .in1(in1[i]),
                .addr(addr),
                .out(out[i]),
                .dout(dout[i])
            );
        end
    endgenerate

endmodule



Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 19:22
Рейтинг@Mail.ru


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