Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Cyclone IV Logic Element
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Dootch
Добрый день.
Разработка ведется в среде 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?
doom13
Может из-за того что мегафункции используются. То же, что и у Вас:

Код
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


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

Хотя, возможно, я и путаю семейства
Dootch
Цитата(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

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



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


Добавил скрины, результат - одна ячейка.
Dootch
Цитата(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?
doom13
Цитата(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?


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


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

Вопрос теперь в том как мне указать компилятору, что если я использую 100-10000 таких схем в проекте, то каждая должна лежать в одной ячейке? Может LogicLock мне в помощь, но кажется это несколько из другой оперы.
doom13
Цитата(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


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.