Estoy tratando de describir el siguiente comportamiento de MCP4921 DAC.
Estoy utilizando la placa FPGA Basys 2 como maestra.
He escrito el siguiente código. Lo que funciona de alguna manera.
module SPI_DAC_MCP4921(
input [11:0] Data ,
input Clk,
output SCK,
output reg CS_L, //chip select low signal
output reg SPI // serial data
);
assign SCK = Clk;
reg [4:0] counter=0; //20 tick counter
parameter [3:0] write_command = 4'b0111; // Anot=0 BUF=1? GAnot=1 SHDNnot=1?
//reg [15:0] write_command_register = {write_command, Data}; // 16 bit write register
always @ (posedge Clk) begin
if (counter==0 | counter < 4) begin // first 4 bits
CS_L <= 1'b0; // set CS_L active
SPI <= write_command[3-counter]; // send 4 bit write command
counter <= counter+1;
end else if (counter >=4 & counter <=15) begin //12 bits
SPI <= Data[15-counter]; //send data bits, starting with MSB
counter <= counter+1;
end else if (counter > 15 & counter <=18) begin //deactivate CS_L
CS_L <= 1'b1;
counter <= counter+1;
end else if (counter ==19) counter <= 1'b0; // 20th tick reset counter
//counter <= counter+1;
end
endmodule
El problema es que, mientras escribo en HDL, no pienso en el hardware real. No tengo una metodología. ¿Debo esbozar un diagrama de estado? ¿Cómo debo dibujar el flujo? Quiero decir que entiendo los bloques combinacionales; muxes, sumadores, comparadores, etc. y elementos de memoria ff.s, registros. Combinar estos bloques para un diseño más complejo me resulta difícil. Estoy buscando mejoras en mi código, consejos generales de estilo. Cualquier ayuda es apreciada.