File "code verilog.txt"

Full Path: /home/analogde/www/Opamps/Upload_code/Transfert/code verilog.txt
File size: 5.02 KB
MIME-type: text/x-ruby
Charset: utf-8

	
	output            conv_en,
	reg            conv_en_func;
	input             test_config_dft,
	input             test_conv_start,           //external conv_en in test_config_dft
	
	assign conv_en = conv_en_func | ( test_conv_start & test_config_dft ) ; 
	
	/*******************************/
	
	reg  sleep_adc_trigger_req_tmp  ;
reg sleep_adc_trigger_req_sync ;
reg sleep_adc_trigger_req_sync_pred ;

always @ (posedge clk or negedge reset_b) begin
   if (!reset_b) 
   begin   
      exit_from_sleep_detected        <= 1'b0;
      sleep_adc_trigger_req_tmp       <= 1'b1;
      sleep_adc_trigger_req_sync      <= 1'b1;
      sleep_adc_trigger_req_sync_pred <= 1'b1;
   end 
   else begin
      sleep_adc_trigger_req_tmp <= !oscslp_conf ? sleep_adc_trigger_req  :  !sleep_mode_deb ;
          
      sleep_adc_trigger_req_sync <= sleep_adc_trigger_req_tmp;
      sleep_adc_trigger_req_sync_pred  <=  sleep_adc_trigger_req_sync ;
 
      if (sleep_adc_trigger_req_sync  && !sleep_adc_trigger_req_sync_pred )
         exit_from_sleep_detected <= 1'b1;
      else 
         exit_from_sleep_detected <= 1'b0;
   end
end

*///////////////////////////////

http://www.chipverify.com/verilog/positive-edge-detector-verilog

module pos_edge_det ( input sig,
                      input clk,
                      output pe);
 
  reg   sig_dly;
 
  always @ (posedge clk) begin
    sig_dly <= sig;
  end
 
  assign pe = sig & ~sig_dly;
endmodule 




	wire signal_in;
wire edge_detected;
reg signal_d;

always @(posedge clk or negedge rst_n)
begin
if (~rst_n)
signal_d <= #1 1'b0;
else
signal_d <= #1 signal_in;
end

assign edge_detected = signal_in & (~signal_d);





module FED(in,clk,out);
input in,clk;
output out;
wire q0,q1;
D_FF D1(in,clk,q0), //instantiation of D Flip Flop
D2(q0,clk,q1);
assign out=(q0 && !q1);
endmodule

module D_FF(d,clk,q); //D Flip Flop module
input d,clk;
output reg q;
always@(negedge clk)
begin
q<=d;
end
endmodule



module control
(
    output logic pcEn,
    input clock, ready
);
    reg r1, r2, r3;

    always @(posedge clock) begin
        r1 <= ready;    // first stage of 2-stage synchronizer
        r2 <= r1;       // second stage of 2-stage synchronizer
        r3 <= r2;       // edge detector memory
    end

    pcEn <= r2 && !r3;   // pulse on rising edge
endmodule



https://books.google.fr/books?id=aQd4QYNV88EC&pg=PA11&lpg=PA11&dq=verilog+rising+edge+detect+example&source=bl&ots=f-8kWLIWGS&sig=UJUZDOpyYzfiy3r_iq0GP7qF9SM&hl=fr&sa=X&ved=0ahUKEwjRt8DEjfHXAhXnD8AKHbstChw4ChDoAQhXMAY#v=onepage&q=verilog%20rising%20edge%20detect%20example&f=false

pour changer la fréquence de l'adc de 1us a 2us soit 500Khz

input          clk_42p6us_en,
input          clk_85p3us_en,
input          clk_170p6us_en,
input          clk_682p6us_en,
input          i2c_sel,
input [1:0]    conv_period,

reg         refresh_clk_en;

// -----------------------------------------------------------------------------
// i2c periodic conv counter - refresh period 2ms  
// -----------------------------------------------------------------------------
// adc VIT conversion refresh period progammable by i2c
  always @ (*) begin
     case (conv_period )
        2'b00:  refresh_clk_en = clk_682p6us_en ;  //conv period= 10ms
        2'b01:  refresh_clk_en = clk_170p6us_en;   //conv period= 2ms
        2'b10:  refresh_clk_en = clk_85p3us_en;    //conv period= 1ms
        2'b11:  refresh_clk_en = clk_42p6us_en;    //conv period= 500us
      endcase  
  end
   
   
   
   
   assign adc_clk_en =  fsm_clk_en | serial_clk_en;

always @ (*) begin
    case ( adc_clk_freq )
    2'b00 : adc_clk_sel = adc_clk2_en;       //750khz  
    2'b01 : adc_clk_sel = adc_clk_en ;       //3Mhz          
    2'b10 : adc_clk_sel = adc_clk1_en;       //1.5Mhz        
    2'b11 : adc_clk_sel = adc_clk3_en;       //375khz       
    endcase
end

dig_cgc cgc_adc_clk   ( .clkout( adc_clk_int ), .clkin( adc_clk_in ), .en( adc_clk_sel & adc_clk_en ), .se( scan_en ) );

assign adc_clk = ( !scan_mode && test_config_dft ) ? adc_ext_clk : adc_clk_int;

assign en_adc = en_adc_start | en_adc_fsm;



	$display("\n enter test_mode");
   i2c_master.i2cWr(8'd126,8'h17);
   i2c_master.i2cWr(8'd126,8'h51);

   $display("\n verify test_mode");
   i2c_test_mode_sns_fld = 1;
   i2c_read_fields(`TEST_REGISTER0,8'hf8);
         
   $display("\n enter ADC DFT config");
   i2c_tb_adc_dft_config_fld = 1'b1;
   i2c_tb_adc_ext_vref_fld = 1'b1;
   i2c_tb_adc_channel_fld = 3;
   i2c_write_fields(fnGetAddr("i2c_tb_adc_dft_config_fld"));   
   #100;
   check_digital_net_id("cli_in_en",cli_in_en,1'b1);
   check_digital_net_id("mode_in_en",mode_in_en,1'b1); 
    
   $display("\n run conversion for channel 4");     
   i2c_adc_manual_fld = 1'b1;
   i2c_adc_request_fld =1'b1;    
   i2c_write_fields(fnGetAddr("i2c_adc_request_fld"));   
   #1_000; //resynchro



dans regs 

	 .adc_manual                  ( adc_manual_reg ),         
 .tb_adc_dft_config           ( tb_adc_dft_config ),
    .tb_adc_signed               ( tb_adc_signed ),
    .tb_adc_channel              ( tb_adc_channel ),
    .tb_adc_ext_vref             ( tb_adc_ext_vref ),