вот ссылка на проект
vg.ucoz.ru/oscill/EPM240T100C5.zip
писано в quartus 9.1 sp2
немного опишу задачу:
при помощи плис я хочу сделать устройство захвата для самодельного цифрового осцилографа
частота дискретизации планируется в 80 мгц (АЦП AD9057)
внешний контроллер будет управлять плис, по шине состоящей из D7-D0, и сигналов управления WR и CS (10 проводов)
нужны следующие команды:
0х00- нет операции
0х01 - установка 8 младших бит адреса
0х02 - установка средних 8 бит адреса
0х03 - установка старшего бита адреса
0х04 - чтение памяти
0x05 - запуск однократного преобразования\захвата входного сигнала
команды 0х01-0х05 двубайтовые, вслед за кодом команды идет 1 байт параметра, в 0х01-0х03 - это часть адреса (всего адресуется 128 кб озу), 0х04 - шаг приращения адреса при чтении (от 1 до 255), в 0х05 - делитель частоты преобразования
описал железо:
input wire clk; // тактирующий сигнал (80 мгц)
input wire wr; // сигнал выбора операции записи\чтения
input wire cs; // строб операции
input wire [7:0] data8; // шина данных\команд плис
output reg [16:0] adr_ram; // шина адреса для ram
output reg adc_enc; // управление выборкой из АЦП
output reg reg_adc_cs; // управление регистром АЦП
output reg reg_ram_cs; // управление регистром RAM
output reg ram_wr; // сигнал выбора операции RAM запись\чтение
output reg ram_oe; // строб операции с RAM
reg[16:0] adr_value; // внутренний регистр адреса RAM для операций
reg wait_add_byte; // признак ожидания доп. байта команды
reg [2:0] commtype; // команда
reg int_wr; // сохранение копии сигнала wr
reg [7:0] adr_step; // шаг приращения адреса для чтения RAM
дальше хочу по фронту сигнала cs считывать команду и доп. байт к ней (или читать память), выполнять какое то действие, и по спаду сигнала сбрасывать состояние управляемых устройств
для этого в always прописал реагирование на любое изменение cs
always @(cs) // при изменении cs
begin
if (cs==1)
begin
// дешифровка записываемой в ПЛИС команды
int_wr<=wr; // сохраним вид операции (чтение\запись)
if (wr==0) // запись команды в ПЛИС
begin
if (wait_add_byte==0) // принимаем первый байт
begin
wait_add_byte<=1; // в следующий раз принимаем доп. байт
commtype<=data8[2:0]; // запомним полученную команду
if (commtype==`NOP) wait_add_byte<=0; // у команды NOP нет доп. байта
end else // получаем дополнительный байт команды
begin
wait_add_byte<=0; // следующий принимаемый байт - команда
case (commtype)
`SET_L8: begin // принимаем младшие 8 бит адреса для чтения
adr_value[7:0]<=data8[7:0];
end
`SET_M8: begin // принимаем средние 8 бит адреса для чтения
adr_value[15:8]<=data8[7:0];
end
`SET_H8: begin // принимаем старший бит адреса для чтения
adr_value[16]<=data8[0];
end
`RAM_READ: begin // принимаем шаг приращения адреса для чтения
adr_step<=data8;
end
`ADC_SYNC: begin
end
`ADC_START: begin
end
endcase
end
end else // здесь у нас wr=0
begin // чтение из памяти
adr_ram<=adr_value; // выдадим адрес для операции чтения
ram_wr<=1; // операция чтения
ram_oe<=0; // строб
end
end
соответственно когда сигнал cs снимается - мы прекращаем исполнение команды
else // при спаде импульса по cs
begin
if (int_wr==1) // у нас была операция чтения ?
begin
if (commtype==`RAM_READ)
begin
ram_oe<=1; // отключим чтение с SRAM
adr_value<=adr_value+adr_step; // прирастим адрес для чтения на шаг
end
end
end
end
этот код компилируется с какими то не понятными мне предупреждениями
Warning: Circuit may not operate. Detected 3 non-operational path(s) clocked by clock "wr" with clock skew larger than data delay. See Compilation Report for details.
Warning: Circuit may not operate. Detected 1 non-operational path(s) clocked by clock "cs" with clock skew larger than data delay. See Compilation Report for details.
Warning: Found 16 node(s) in clock paths which may be acting as ripple and/or gated clocks -- node(s) analyzed as buffer(s) resulting in clock skew
Info: Detected ripple clock "wait_add_byte" as buffer
Info: Detected ripple clock "commtype[2]" as buffer
Info: Detected ripple clock "int_wr" as buffer
Info: Detected ripple clock "commtype[0]" as buffer
Info: Detected ripple clock "commtype[1]" as buffer
Info: Detected gated clock "adr_value[16]~3" as buffer
Info: Detected gated clock "adr_value[8]~2" as buffer
Info: Detected gated clock "wait_add_byte~2" as buffer
Info: Detected gated clock "commtype[0]~0" as buffer
Info: Detected gated clock "adr_value[16]~0" as buffer
Info: Detected gated clock "adr_value[0]~1" as buffer
Info: Detected gated clock "rtl~0" as buffer
Info: Detected gated clock "ram_oe~1" as buffer
Info: Detected gated clock "ram_oe~0" as buffer
Info: Detected gated clock "wait_add_byte~0" as buffer
Info: Detected gated clock "adr_ram[16]~0" as buffer
что написано не так как нужно ?
ссылка на архив проекта в начале сообщения