Generando selección de canal para ADC multicanal

0

Estoy usando un FPGA para controlar un ADC de 4 canales (ADC084S101) para muestrear cuatro voltajes analógicos diferentes. Para indicar al ADC qué canal muestrear a continuación, hay un registro de control que puede escribirse con 00, 01, 10 u 11 para muestrear los canales 0, 1, 2 o 3, respectivamente (consulte la tabla a continuación).

Noestoysegurosielenfoquequeestoytomandoconestemóduloescorrecto.MiintenciónesqueelmódulotomelasmismasseñalesCSySCLKquevanalADCytambiénunnúmerode2bitsquecorrespondealsiguientecanalquesevaamuestrear.Luego,encadaflancodescendentedeCS,reinicieuncontadora0.EncadaflancoascendentedeSCLK,cierreelbitapropiadodelasecuenciautilizandoelconteoincrementadocomouníndice,yasea0sinoleimportaolos2bitsquecorrespondenalsiguientecanalsiestánenelíndiceapropiado.

moduleGenerateNextAddr(inputcs,inputsclk,input[1:0]addr,outputregdout);reg[4:0]count;reg[1:0]currentAddr;always@(posedgesclkornegedgecs)beginif(cs)begincount<=0;currentAddr<=addr;endelsebegincount<=count+1;if((count!=4'b0011)&&(count!=4'b0100))begin//Ifwe'reclockingoutanyofthe'dontcare'bitsoftheADCdout<=0;endelseif(count==4'b0011)begindout<=currentAddr[1];endelseif(count==4'b0100)begindout<=currentAddr[0];endendendendmodule

EstoyluchandoparaqueVerilogseaimplementadoparageneraresteflujodebits(soyundesarrolladordesoftwarequesolohaestadotrabajandoconVerilogdurantealgunosmeses).ElmóduloVerilogqueheescritoanteriormentenoessintetizableynoestoysegurodeporqué(miplacadedesarrolloesunNexys3deDigilent).Elmensajedeerrores"La asignación en varios bordes individuales no es compatible con la síntesis".

    
pregunta zr870

1 respuesta

3

Parece que estás tratando de hacer lógica con una señal de reinicio asíncrono llamada cs .

Pero no coinciden con la sensibilidad del borde para la señal de reinicio. Estás atento al borde descendente de cs , pero la lógica requiere que se restablezca cuando cs es alto.

Necesitas tener sensibilidad al posedge cs y restablecer los registros cuando cs es alto, o tener sensibilidad al negedge cs (como tú lo has hecho) y restablecer los registros cuando cs es bajo.

Por ejemplo,

always @(posedge clk or negedge cs) begin
    if(~cs) begin
         count <= 0
         ...
    end else begin
         ...
    end
 end
    
respondido por el The Photon

Lea otras preguntas en las etiquetas