|
Cyclone IV Logic Element, Использование ресурсов ячейки |
|
|
|
Apr 15 2014, 06:29
|
Частый гость
 
Группа: Свой
Сообщений: 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?
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
(1 - 8)
|
Apr 15 2014, 07:01
|
Профессионал
    
Группа: Свой
Сообщений: 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
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 15 2014, 07:02
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
потому что, на сколько я помню, из LUT нельзя вывести одновременно и комбинаторную ф-цию, и регистровую. Или, или. Поэтому, два варианта есть - вынести триггер в другой LE, или повторить логику в другой LUT.
Хотя, возможно, я и путаю семейства
|
|
|
|
|
Apr 15 2014, 07:07
|
Частый гость
 
Группа: Свой
Сообщений: 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
но занимает один элемент. Ваш код выдает тот же результат.
|
|
|
|
|
Apr 15 2014, 07:21
|
Частый гость
 
Группа: Свой
Сообщений: 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
|
|
|
|
|
Apr 15 2014, 07:28
|
Профессионал
    
Группа: Свой
Сообщений: 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?
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 15 2014, 07:44
|
Частый гость
 
Группа: Свой
Сообщений: 76
Регистрация: 12-02-10
Из: Хабаровск
Пользователь №: 55 441

|
Цитата(doom13 @ Apr 15 2014, 10:28)  Выше прикрепил результат компиляции под Ваш кристал, у меня заняло одну ячейку (на Cyclone 5 так же одна). Выставил Auto Fit вместо Standart Fit - все получилось. Вопрос теперь в том как мне указать компилятору, что если я использую 100-10000 таких схем в проекте, то каждая должна лежать в одной ячейке? Может LogicLock мне в помощь, но кажется это несколько из другой оперы.
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 15 2014, 08:11
|
Профессионал
    
Группа: Свой
Сообщений: 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
Эскизы прикрепленных изображений
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|