Перейти к содержанию
    

Тактовые диаграммы - авто генерация

Здравствуйте. Подскажите новичку существует ли визуальный редактор-инструмент для систем на основе систем ПЛИС, в котором рисуешь тактовую "временную" диаграмму c привязкой к одному глобальному сигналу , а на выходе получаешь VHDL или Verilog программу пригодную для прошивки ПЛИС, естественно не для моделирования. Диаграммы работы очень простые от одного глобального сигнала длиной до 200 циклов получаются 14 различных сигналов с длительностями равными кратному числу глобала и с двигами на него же, потом это все дело зацикливается. Языки хардварного уровня просто нет времени учить, да и это не моя специальность т.к. 95 процентов рабочего времени занимаюсь технологией. Раньше эти задачи решал с помощью микроконтроллера, но на такие задачи все это дело плохо ложится т.к. постоянно приходится менять импульсы и тратится куча драгоценного времени на тупую подгонку nop-ов и setb-ов. На время нашел выход генератор цифровых последовательностей AKC-4116, импульсы с которого через буферную ПЛИС (забил место на плате), у которой входы соединены с выходами и сигналы затем поступают на аналоговые преобразователи уровня. Хочется отучить "коробку" от компьютера. Использую в работе Xilinx ISE Design Suite 10.1 и xcr3064xl-6PC44 (Coolrunner XPLA3). Пытаюсь уже безуспешно года два взвалить сию задачу на студентов, но у них дипломные работы заканчиваются раньше чем они чего то освоят в плане программирования ПЛИСов, а выдресировать их рисовать в визуальном редакторе гораздо проще, т.к. они с компьютером с пеленок на ты.

Если хоть кто нибудь, что то подскажет буду очень благодарен. С Уважением Слава.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

... существует ли визуальный редактор-инструмент для систем на основе систем ПЛИС, в котором рисуешь тактовую "временную" диаграмму c привязкой к одному глобальному сигналу , а на выходе получаешь VHDL или Verilog программу пригодную для прошивки ПЛИС, естественно не для моделирования.

 

Было такое у Альтеры в Max+2, только без промежуточной трансляции в HDL, а как самоcтоятельное средство описания.

Изменено пользователем Джеймс

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Было такое у Альтеры в Max+2, только без промежуточной трансляции в HDL, а как самоcтоятельное средство описания.

Спасибо за наводку, но к сожалению я уже плату нашлепал под Хилиникс, и на сколько я знаю у Альтеры выбор с радиационно-стойкими ПЛИС не богат. Так как собираюсь покупать у Хилиникса что нибудь радиационно-стойкое или перекладывать программу на базовый матричный кристал от Зеленограда, они в основном рекомендуют выполнять программы на XILINX Foundation SeriesBase PC на библиотеках XC2000, XC3000, XC 4000, XC 4000E или ALTERA-MAX+plusIIVer.6.2 только с применением VHDL описания. Всегда хочется сразу убить несколько зайцев, чтобы и приборная часть и технологическое оборудование работало на одном и том же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Диаграммы работы очень простые от одного глобального сигнала длиной до 200 циклов получаются 14 различных сигналов с длительностями равными кратному числу глобала и с двигами на него же, потом это все дело зацикливается. Языки хардварного уровня просто нет времени учить, да и это не моя специальность

А какие-то незнакомые визуальные утилиты время учить есть?

 

Может, все-таки, как-нибудь сами? Например, все что нужно забиваем в память, плюс счетчик адреса циклический:

module top
(
    rst,
    clk,
    dout
);

input rst;
input clk;
output [13 : 0] dout;

reg [7 : 0] addr;

rom rom
(
    .clk (clk),
    .addr (addr),
    .dout (dout)
);

always @(posedge clk or posedge rst)
begin
    if (rst)
        addr <= 8'd0;
    else
        if (addr == 8'd200)
            addr <= 8'd0;
        else
            addr <= addr + 1'b1;
end

endmodule

Модуль rom сделайте сами через Core Generator. В качестве содержимого нарисуйте нужную вейвформу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...

Если хоть кто нибудь, что то подскажет буду очень благодарен. С Уважением Слава.

Я сам в этом деле только начинаю, но по-моему, как раз на Альтере в Квартусе надо использовать шаблон от машины состояний.

Там потом все достаточно просто. Если сигналов немного, то можно уложиться в MAX3000A.

А вообще-то, для того, чтобы качественно чего-то подсказать, надо знать сколько сигналов и как часто они должны меняться от входа.

Хорошо бы одну из временных диаграмм в студию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Использую в работе Xilinx ISE Design Suite 10.1 и xcr3064xl-6PC44 (Coolrunner XPLA3).

Да, что-то не заметил, что схемка-то мелкая.

Если бы схема была побольше, можно было бы в лоб - через память.

А так, тогда так:

always @(posedge clk)
begin
    if (cnt == 8'd200)
        cnt <= 8'd0;
    else
        cnt <= cnt + 1'b1;
    case (cnt)
        8'd0  : q0 <= 1'b1;
        8'd3  : q0 <= 1'b0;
        8'd7  : q1 <= 1'b1;
        8'd10 : q1 <= 1'b0;
        8'd30 : q2 <= 1'b1;
        8'd40 : q2 <= 1'b0;
    endcase
end

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо dvladim. Идею я понял, а дальше уже как нибудь сам. Мне вариант с памятью понравился универсальностью, а микросхему можно поменять

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

все уже придумано до нас :)

в верилоге есть функции $readmemb и $getpattern

 

вот типа пример

 

но наверняка есть опенсорсные рисовалки вэйформов, я никогда не интересовался, но что-то видел

 

module top;
parameter in_width=10,
patterns=200,
step=20;
reg [1:in_width] in_mem[1:patterns];
integer index;
// declare scalar inputs
wire i1,i2,i3,i4,i5,i6,i7,i8,i9,i10;
// assign patterns to circuit scalar inputs (a new pattern
// is applied to the circuit each time index changes value)
assign {i1,i2,i3,i4,i5,i6,i7,i8,i9,i10}
= $getpattern(in_mem[index]);
initial
begin
// read stimulus patterns into memory
$readmemb("patt.mem", in_mem);
// step through patterns (note that each assignment
// to index will drive a new pattern onto the circuit
// inputs from the $getpattern system task specified
// above
for(index = 1; index <= patterns; index = index + 1)
#step;
end
// instantiate the circuit module
mod1 cct(o1,o2,o3,o4,o5,o6,o7,o8,o9,o10,
i1,i2,i3,i4,i5,i6,i7,i8,i9,i10);
endmodule

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в верилоге есть функции $readmemb и $getpattern

И шо, таки синтезируется уже?

См. первый пост:

а на выходе получаешь VHDL или Verilog программу пригодную для прошивки ПЛИС, естественно не для моделирования.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...