Цитата(andrew_b @ Jul 6 2018, 14:46)
Желание разделить конфигурацию и чтение данных понятно, но оно выливается в мультиплексирование сигналов и пляску с констрейнами.
Все делается в одном клоке 100МГц.
CODE
module adc_read_quadSPI(clk,start,rstb,done,sck,din,cs,dout);
input clk; //входные тактовые импульсы
input start; //запуск передачи
input rstb; //отмена передачи
output done;//флаг завершения приема
output sck; //выходные тактовые импульсы,0-исхдное состояние,переход 0->1 запись данных в АЦП
input[3:0] din; //входные данные
output cs; //1-исходное состояние,0-активный уровень
output[17:0] dout; //выходные данные
reg[19:0] rreg; //20 битный регистр данных
reg[2:0] cur,nxt; //регистры состояний
reg[2:0] nbit;
reg clr,shift;
reg cs,done,sck;
wire[3:0] din;
wire signed[17:0] dout;
assign dout[17:0]=$signed(rreg[19:2]);
parameter idle=3'b000,send=3'b001,finish=3'b010,done_state=3'b011,cs_set=3'b100;
//STATE MACHINE:
//state transistion
always@(negedge clk or posedge rstb)
begin
if(rstb==1'b1)
cur=finish;
else
cur=nxt;
end
//FSM I/O
//always @(start or cur or nbit)
always @(*)
begin
nxt=cur;
clr=0;
shift=0;
done=0;
cs=1;
case(cur)
idle:
begin
if(start==1'b1)
begin
cs=0;
shift=1;
nxt=send;
end
end //idle
send:
begin
cs=0;
if(nbit!=3'd5)
shift=1;
else
nxt=done_state;
end//send
done_state:
begin
clr=1;
cs=0;
nxt=cs_set;
end
cs_set:
begin
nxt=finish;
done=1;
clr=1;
end
finish:
begin
clr=1;
nxt=idle;
end//finish
default
nxt=finish;
endcase
end//always
//CLOCK GENERATOR BLOCK:
always@(negedge clk or posedge clr)
begin
if(clr==1'b1)
sck=0;
else
begin
if(shift==1'b1)
sck=~sck;
end //rst
end
always@(posedge sck or posedge clr)
begin
if(clr==1'b1)
nbit<=0;
else
begin
nbit<=nbit+1'd1;
rreg<={rreg[15:0],din[3],din[2],din[1],din[0]};
end
end
endmodule
Даже если я оставляю один любой блок, убрав мультиплексирование, TimeQuest ругается на те же самые неконстрейненные выводы. Дело не в мультиплексировании, нужно описать констрейны выводов.
Как описать задержки от спада CS до первого фронта SCLK и MOSI, и так же от спада последнего импульса SCLK и удержание данный MOSI до фронта CS.
Цитата(andrew_b @ Jul 6 2018, 14:46)
Сделайте так, чтобы были задействованы триггеры в IOB для всех выходных сигналов. Тогда их констрейнить не придётся.
А вот про это поподробней можно? Где это делается? В Assignment Editor только вижу Fast Output (Enable) Register. Его включение вопрос не решило.
Сообщение отредактировал limbast - Jul 9 2018, 06:54