7. vaja: komponenta za RedPitayo

Naredili bomo komponento za merilno kartico RedPitaya, ki bo vsebovala vmesnik za sistemsko vodilo z enim registrom in obdelavo podatkov iz enega vhodnega analognega kanala.

Naloga

Naredili bomo vezje red_pitaya_proc, ki vsebuje signale za sistemski vmesnik, v katerem bo en 8-bitni register. Uporabi vzorec kode za izdelavo vmesnika s sistemskim vodilom.
Vmesnik vsebuje signale:

Izdelavo vmesnika za sistemsko vodilo si bomo ogledali na primeru izseka kode komponente red_pitaya_hk v jeziku Verilog:

//---------------------------------------------------------------------------------
//
//  System bus connection: base addr+0 = ID value(read), addr+0x30 = led_o(read/write)

always @(posedge clk_i)
if (rstn_i == 1'b0) begin
  led_o <= {8'b0};
end else if (sys_wen) begin
  if (sys_addr[19:0]==20'h30)   led_o <= sys_wdata[8:0];
end

wire sys_en;
assign sys_en = sys_wen | sys_ren;

always @(posedge clk_i)
if (rstn_i == 1'b0) begin
  sys_err <= 1'b0;
  sys_ack <= 1'b0;
end else begin
  sys_err <= 1'b0;

  casez (sys_addr[19:0])
    20'h00000: begin sys_ack <= sys_en;  sys_rdata <= {id_value}; end

    20'h00030: begin sys_ack <= sys_en;  sys_rdata <= {{32-8{1'b0}}, led_o}; end

      default: begin sys_ack <= sys_en;  sys_rdata <=  32'h0; end
  endcase
end

Prevodi nekaterih izrazov jezika Verilog v VHDL:

always @(posedge clk_i) if rising_edge(clk_i)
1'b0 '0'
8'b0 "00000000"
20'h30 X"00030"

Vrednost registra v vmesniku naj določa faktor skaliranja 14-bitnega analognega vhodnega signala (adc_i). Vhodni signal predstavlja vrednosti vzorčene z enim kanalom ADC, ki so zapisane v dvojiškem komplementu, zato jih najprej pretvori v 14-bitni notranji signal tipa signed. Vrednost v registru vmesnika pa naj bo 8-bitno nepredznačeno število, ki ga pretvori v 9-bitno predznačeno število. Rezultat množenja je 23-bitni vektor, ki ga skrči nazaj na 14-bitni izhod (adc_o). Če pride pri množenju do prekoračitve območja 14-bitnih vrednosti, naj gre izhodna vrednost v pozitivno ali negativno nasičenje.

Opiši vezje in preveri delovanje na simulaciji.