From 7a462423edf84b2706e0e982f65f0f64e5636794 Mon Sep 17 00:00:00 2001 From: Juan64Bits Date: Mon, 12 Apr 2010 21:26:26 -0500 Subject: [PATCH] Fixing multi-channel mode. --- Examples/ADC/Scope-QT-src/ADC | Bin 43080 -> 43080 bytes Examples/ADC/Scope-QT-src/ADCw.cpp | 16 +- Examples/ADC/Scope-QT-src/ADCw.h | 3 +- Examples/ADC/Scope-QT-src/Makefile | 2 +- Examples/ADC/Scope-QT-src/jz_adc_peripheral.h | 3 +- Examples/ADC/Scope-QT-src/mainwindow.cpp | 30 +- Examples/ADC/logic/ADC.bit | Bin 169292 -> 169292 bytes Examples/ADC/logic/ADC_peripheral.v | 97 ++++--- Examples/ADC/logic/ADC_peripheral_tb.v | 263 ++++++++++++++++++ docs/wiki/.~lock.ADC.odg# | 1 + docs/wiki/ADC.odg | Bin 23346 -> 23233 bytes 11 files changed, 347 insertions(+), 68 deletions(-) create mode 100644 Examples/ADC/logic/ADC_peripheral_tb.v create mode 100644 docs/wiki/.~lock.ADC.odg# diff --git a/Examples/ADC/Scope-QT-src/ADC b/Examples/ADC/Scope-QT-src/ADC index 96016a3136e25bb4c13ee1b44f0b9a98baf1a743..837224e543589355330ec619e745d59cfa540c22 100755 GIT binary patch delta 4366 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 bsGLu9Rp5Sq)m4dVQQn;;9g95M{kG#@b?T64 delta 4527 zcmd5@KWGBFZA0#0QU0L0uGZSvF)RfwCh5dUY>SCCq(l7ryB`oSZPIl5 zPrsRafA`#bUf=o7Id`|WPwDMb!beQcRuMhh@#@Ox3-=OTxL2hMEW`(*FY;%R9|M?S z`9+ebj$BM%W)^)sBkQ2J%)iPiz#Khyr&z#kb7zVKK0dbq^A~d$-u{8jYH_9$IiFL> zxtC~w;$6;`%}P8iZYMIeCs1KX(~i1(`M&IFYkMbHEt=t|>r>4$S#k+dTuD^e?x4ko zr6xfp*SBfPv_c-*#%ecGR+`*bGE8)hw`ZqDKR?lGPN$PI4J&V4TC8-aE1pu? zo8athw%s{JDJO z1HAq2*A%Ot=gg~9lKlMgyb2}5&({H}pG)UgC;>nJWPX)WqgX(9f>!h&eIk}-acZ8_7pe_{GpJBP4y^SoO>Z_07SN(uQX zrPL{X_e_r0mNb4iux^Xh;-Vw_XY=&j{N|!DyBXNMe+(S}oi@R0Hj}SiN(DjB2W=Ul z-JrLO;rDFwXb0B2(dQPsRI5Tp+8K6Qmy$+D-4w5o)4GIc zssUxYE9A5m01tPDVQ2#~fnQwaSauFc?jUQLMy9!PEnke#5Tp@lz)Y%DRy~9)F%TMi z_76>smuD7A;Xf{$5hvy6p)<+G5l?ULe=NY`y;C$ezItmIM2?am26y|VDo|pQPgi6nIdNHSw1l~2Au^taL7zMI8+s=8MJI;zPETG-M6nSYFP>$iT@I zD{7>A1a-xxGN$D zN_Q*bVNNVtsQAKsEIm2WSe7KpvfXY+!`e;twHq588`rL{aop+N)ZlpFk?(JE6x6J( ztJ_%XaA#yW);2npHssEqzrwrCfhd&7vZ7!>C97MdmOE4m&sORDQk91IegAq<%S*~1 zjF#tp*t^EZ%V#RyK;%;SuSJx*LZx5@|MZ?8PVU1mBDGYd0gNV$YL7}553jCxCq^Cx zK^i?g_uiD|Q<8JtA`;UK3(bN^I??ziO-skx^RA{91Jf^PS|iX63;`blb^=?0XMnxH z4}q48;77T&UedIBps`=mj6g5Y1$^vdO&bD+KY@Pqk@HuyW~~^D#=mG-N@HZF&I)E2|jlkc5uN&AeS9O z0pJnfE5N!=rS0#?CzH5Zes^a%nB__(Rj?O-8AE?^}|9Q5po|1U& zYo|%zIET|AUbNaSg1mP1tQoZhDtV=aHC57+dT-cxKnWZa9f+gkFGPIb;GWg?alR!g zox+Z>p^D#Kofu<zNG5 z8H{e6wG#11Yho)dfG#dkb-^MFDp#5}AAg&C>Zs$^h&PQf?RG?A7B%&GY{ z&d7WBy((U>_8OG>mArg?vQqEkhu7Cd)vr{k))%?7{tseg&5?~A(e*xrpiCu=-(Q~= zX?S3xFzH)-@xctcTs2~dfblcv4M+(2X6)UXj{nG;xBk|E_LRHLZt6n{_3_$m zsZmxxt{y+{+m>P){#)I%Ej9XbP^HU36a-%c^I)Y)gAwuQo5n>_PCf=2ucMTfkAWuW zC{@VEpw|*UHWUrhHXR2eUp5~U_*eeY_WkI!vv=4<3zzKZij#NQ46q0&dIAZHdu{yA zJXsT^JN25V+u3d#ZBTI(OAgfQ0LQjALqS_>7t$biSEk}E=ek{`;t-$QCG+Ouu6za8 zVDj!KkZ>>UmML>`cfM`3Ij2C+c~s~%j@@HdHk9(5J$cBaO?xtD$QPBRABPwHA{wo! zc(^4<(}^)7t&C6anWhBsr(jRAQe46}_RLXm%g)(bDu(#+y>^q{%lJoo-&7p=T=is~ zIK{tzGGBCa?7n=_%O(5l;skHnXE*6xpF8%giR*`*THS6eH6x~KG2hsi2fuTl%14r&2>;N>bnQ!zi$K1WeY`B-}?Qt8X~ Sm56f5{%mnAvVH$=68;G;w7Av) diff --git a/Examples/ADC/Scope-QT-src/ADCw.cpp b/Examples/ADC/Scope-QT-src/ADCw.cpp index a295184..a9e9453 100644 --- a/Examples/ADC/Scope-QT-src/ADCw.cpp +++ b/Examples/ADC/Scope-QT-src/ADCw.cpp @@ -2,9 +2,10 @@ ADCw::ADCw() { - BUFFER_OFFSET = 8; + BUFFER_OFFSET = 9; ADC_SPI_CLKDIV=ADC_SPI_CLKDIV_MAX; //Set clock to minimum speed - BUFFER_LEN=10; + BUFFER_LEN=16; + MUX_CHANNELS =0; ADCBuffer = jz_adc_init(); @@ -25,7 +26,6 @@ void ADCw::testADC() printf("\nINIT TEST1: Autoselft {(Vref+) - (Vref-)}/2 -> Return 0x0200 \n"); adcConfig(ADC_CMD_SET_AUTOSELFT_1); adcConfig(ADC_CMD_READ_AUTOSELFT_1); - while(adcCheckBufferFull())usleep (10); for(int i=BUFFER_OFFSET; i< BUFFER_LEN/2+BUFFER_OFFSET; i++) printf("[%08X]", ADCBuffer[i]); fflush (stdout); @@ -34,7 +34,6 @@ void ADCw::testADC() printf("\n\nINIT TEST2: Autoselft (Vref-) -> Return 0x0000 \n"); adcConfig(ADC_CMD_SET_AUTOSELFT_2); adcConfig(ADC_CMD_READ_AUTOSELFT_2); - while(adcCheckBufferFull())usleep (10); for(int i=BUFFER_OFFSET; i< BUFFER_LEN/2+BUFFER_OFFSET; i++) printf("[%08X]", ADCBuffer[i]); fflush (stdout); @@ -60,17 +59,18 @@ JZ_REG* ADCw::takeSamplesADC(int CHANNEL) { adcConfig(ADC_CMD_SET_CHANNEL0+CHANNEL); adcConfig(ADC_CMD_READ_CHANNEL0+CHANNEL); - while(adcCheckBufferFull())usleep (10); return (JZ_REG*)(ADCBuffer+BUFFER_OFFSET); } void ADCw::adcConfig(uchar CMD) { - ADCBuffer[0] = ((BUFFER_LEN+(BUFFER_OFFSET-1)*2) << 16) + (ADC_SPI_CLKDIV<<8) + CMD; - usleep (100); + ADCBuffer[0] = (((MUX_CHANNELS<<6) + CMD)<<24) + \ + ((BUFFER_LEN+(BUFFER_OFFSET-1)*2) << 8) + \ + (ADC_SPI_CLKDIV); + while(adcCheckBufferFull()) usleep (10); } int ADCw::adcCheckBufferFull() { - return ADCBuffer[0]&0x20; + return ADCBuffer[0]&0x20000000; } diff --git a/Examples/ADC/Scope-QT-src/ADCw.h b/Examples/ADC/Scope-QT-src/ADCw.h index 83eedb7..4495aba 100644 --- a/Examples/ADC/Scope-QT-src/ADCw.h +++ b/Examples/ADC/Scope-QT-src/ADCw.h @@ -16,7 +16,7 @@ public: JZ_REG * takeSamplesADC(int CHANNEL); void setClockDiv(uchar value){ ADC_SPI_CLKDIV = value;} void setBufferLen(int value){ BUFFER_LEN = value;} - + void setMuxChannels(uchar value){ MUX_CHANNELS = value;} private: void adcConfig(uchar CMD); int adcCheckBufferFull(); @@ -25,6 +25,7 @@ private: uchar ADC_SPI_CLKDIV; int BUFFER_LEN; int BUFFER_OFFSET; + uchar MUX_CHANNELS; }; #endif // ADCW_H diff --git a/Examples/ADC/Scope-QT-src/Makefile b/Examples/ADC/Scope-QT-src/Makefile index b624c46..88adf3d 100644 --- a/Examples/ADC/Scope-QT-src/Makefile +++ b/Examples/ADC/Scope-QT-src/Makefile @@ -1,6 +1,6 @@ ############################################################################# # Makefile for building: ADC -# Generated by qmake (2.01a) (Qt 4.6.2) on: Fri Apr 9 10:33:37 2010 +# Generated by qmake (2.01a) (Qt 4.6.2) on: Mon Apr 12 21:21:04 2010 # Project: ADC1.pro # Template: app # Command: /home/juan64bits/ebd/ECB/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/bin/qmake -spec ../../../../openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/qt-everywhere-opensource-src-4.6.2/mkspecs/qws/linux-openwrt-g++ -unix -o Makefile ADC1.pro diff --git a/Examples/ADC/Scope-QT-src/jz_adc_peripheral.h b/Examples/ADC/Scope-QT-src/jz_adc_peripheral.h index 9617df2..e672bd1 100644 --- a/Examples/ADC/Scope-QT-src/jz_adc_peripheral.h +++ b/Examples/ADC/Scope-QT-src/jz_adc_peripheral.h @@ -25,6 +25,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #define ADC_CMD_NONE 0x00 /* Nothing to do */ #define ADC_CMD_SET_SPI_CLKDIV 0x00 /* Set clock divider for ADC sclk */ +#define ADC_CMD_SET_BUFFER_SIZE 0x00 /* Set clock divider for ADC sclk */ #define ADC_CMD_SET_CHANNEL0 0x30 /* Set channel 0 */ #define ADC_CMD_READ_CHANNEL0 0x20 /* Read channel 0 */ @@ -68,7 +69,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #define ADC_SPI_CLKDIV_MIN 0x08 /* 50/(2*9) -> 2.78MHz (MAX=2.8MHz) */ #define ADC_SPI_CLKDIV_MAX 0xFF /* 50/(2*256) -> 97.65KHz */ -#define ADC_MAX_BUFFER 0x3F0/* 1008 reads/commands */ +#define ADC_MAX_BUFFER 0x3FE/* 1022 reads/commands */ #define CS2_PORT JZ_GPIO_PORT_B #define CS2_PIN 26 diff --git a/Examples/ADC/Scope-QT-src/mainwindow.cpp b/Examples/ADC/Scope-QT-src/mainwindow.cpp index 0c6da83..f6fbbe2 100755 --- a/Examples/ADC/Scope-QT-src/mainwindow.cpp +++ b/Examples/ADC/Scope-QT-src/mainwindow.cpp @@ -17,12 +17,12 @@ MainWindow::MainWindow(QWidget *parent) timer1->start(50); connect(timer1, SIGNAL(timeout()), this, SLOT(updateGraph())); - CHANNEL = 1; ADC1 = new ADCw; ADC1->testADC(); - ADC1->setBufferLen(120); - ADC1->setClockDiv(ADC_SPI_CLKDIV_MAX); //Maximun speed - printf("\nTaking 300 samples each 50ms from Channel 0,1 at Fs=99KHz \n"); + ADC1->setBufferLen(240); + ADC1->setClockDiv(ADC_SPI_CLKDIV_MIN); //Max. speed + ADC1->setMuxChannels(1); + printf("\nTaking 120 samples by channel at Fs=99KHz (trigger=50ms)\n"); } MainWindow::~MainWindow() @@ -36,26 +36,12 @@ void MainWindow::updateGraph() int tempD; - //CHANNEL 0 dataADC=ADC1->takeSamplesADC(0); - for(int i=0; i< 120/2; i++) - { - //printf("[%08X]",dataADC[i]); - tempD = dataADC[i]&0xFFFF; + for(int i=0; i< 240/2; i++) + { + tempD = dataADC[i]&0x0FFF; ui->Graph->addPoint1(tempD+0x3ff); - tempD = dataADC[i]>>16; - ui->Graph->addPoint1(tempD+0x3ff); - } - CHANNEL = 1; - - //CHANNEL 1 - dataADC=ADC1->takeSamplesADC(1); - for(int i=0; i< 120/2; i++) - { - //printf("[%08X]",dataADC[i]); - tempD = dataADC[i]&0xFFFF; - ui->Graph->addPoint2(tempD); - tempD = dataADC[i]>>16; + tempD = (dataADC[i]>>16)&0x0FFF; ui->Graph->addPoint2(tempD); } diff --git a/Examples/ADC/logic/ADC.bit b/Examples/ADC/logic/ADC.bit index b984bf9b9b4e0e8993e3eb22664afd3da0a0c574..646695d2f7ddb0ddfd8daf077b34b2a39baab403 100644 GIT binary patch literal 169292 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 NPyKVlKa|Gr{{uNX*+T#T diff --git a/Examples/ADC/logic/ADC_peripheral.v b/Examples/ADC/logic/ADC_peripheral.v index 185ae3a..a19d5ca 100644 --- a/Examples/ADC/logic/ADC_peripheral.v +++ b/Examples/ADC/logic/ADC_peripheral.v @@ -27,17 +27,22 @@ module ADC_peripheral( clk, reset, cs, ADC_EOC, ADC_CS, ADC_CSTART, reg fullB=0; reg rstStart=0; reg [2:0] w_st0=0; - reg w_st1=0; + reg [2:0] w_st1=0; reg [2:0] w_st2=0; // Confiuration registers - reg CMD_START=0; - reg CMD_TYP=0; - reg [3:0] CMD_ADC=0; - reg [7:0] CLKDIV = 0; - reg [9:0] SIZEB=0; //[10:8] -> size_hi | [7:0] -> size_low + reg [1:0] CMD_SW=0; // Channel offset selection + reg CMD_START=0; // START sampling data + reg CMD_TYP=0; // Command type + reg [3:0] CMD_ADC=0; // ADC command + reg [7:0] CLKDIV = 0; // Clock divisor for SPI + reg [9:0] SIZEB=0; // Buffer size (sampling data len.) //TEMPS - reg [9:0] SIZEB2=0; + reg [9:0] SIZEB1=0; // Temporal for buffer size + reg [9:0] SIZEB2=0; // Temporal for buffer size + reg [2:0] CMD_OFFSET=0; // Channel offset counter MOD8 + wire[2:0] CMD_OFFSETt; // Channel offset to use + wire[3:0] CMD_ADCt; // Temporal for channel offset assign ADC_CSTART = 1'b1; @@ -128,7 +133,7 @@ module ADC_peripheral( clk, reset, cs, ADC_EOC, ADC_CS, ADC_CSTART, // SPI Transmitter always@(posedge clk) begin - if(load_in) in_buffer <= CMD_ADC[3:0]; + if(load_in) in_buffer <= CMD_ADCt[3:0]; if(!fallingSCLK & pulse) begin ADC_SDIN_buffer <= in_buffer[3]; in_buffer <= in_buffer << 1; @@ -142,22 +147,26 @@ module ADC_peripheral( clk, reset, cs, ADC_EOC, ADC_CS, ADC_CSTART, // REGISTER BANK: Write control always @(negedge clk) + begin if(reset) {CMD_START, CMD_TYP,CMD_ADC,SIZEB,we1} <= 0; else if(we & cs) begin case (addr) - 0: begin CMD_START <= wrBus[5]; + 0: begin CLKDIV[7:0] <= wrBus; end + 1: begin SIZEB[7:0] <= wrBus; end + 2: begin SIZEB[9:8] <= wrBus[1:0]; end + 3: begin CMD_SW[1:0] <= wrBus[7:6]; + CMD_START <= wrBus[5]; CMD_TYP <= wrBus[4]; CMD_ADC[3:0] <= wrBus[3:0]; end - 1: begin CLKDIV <= wrBus; end - 2: begin SIZEB[7:0] <= wrBus; end - 3: begin SIZEB[9:8] <= wrBus[1:0]; end default: begin we1 <= 1; end endcase - end else if(fullB || rstStart) begin - CMD_START <= 0; end + end else begin - we1 <= 0; end + we1 <= 0; end + + if(fullB | rstStart) CMD_START <= 0; + end // REGISTER BANK: Read control always @(posedge clk) @@ -165,10 +174,10 @@ module ADC_peripheral( clk, reset, cs, ADC_EOC, ADC_CS, ADC_CSTART, {rdBus} <= 0; else begin case (addr) - 0: begin rdBus <= {CMD_START,CMD_TYP,CMD_ADC};end - 1: begin rdBus <= CLKDIV; end - 2: begin rdBus <= SIZEB[7:0]; end - 3: begin rdBus <= SIZEB[9:8]; end + 0: begin rdBus <= CLKDIV; end + 1: begin rdBus <= SIZEB[7:0]; end + 2: begin rdBus <= SIZEB[9:8]; end + 3: begin rdBus <= {CMD_SW,CMD_START,CMD_TYP,CMD_ADC};end default: begin rdBus <= rdBus1; end endcase end @@ -176,22 +185,22 @@ module ADC_peripheral( clk, reset, cs, ADC_EOC, ADC_CS, ADC_CSTART, // CONTROL always @(posedge clk) if(reset) begin - {w_st0, SPI_wr} <= 0; + {w_st0, SPI_wr, loadB, initB} <= 0; ADC_CS <=1; end else begin case (w_st0) 0: begin - rstStart <= 0; loadB <= 0; initB<=0; + rstStart <= 0; if(CMD_START) begin ADC_CS <=0; SPI_wr <= 1; w_st0 <=1; end end - 1: begin - SPI_wr <= 0; - if(!busy && ADC_EOC) begin + 1: begin SPI_wr <= 0; w_st0 <=2; end + 2: begin + if(!busy & ADC_EOC) begin ADC_CS <=1; if(CMD_TYP) begin rstStart <= 1; @@ -199,31 +208,33 @@ module ADC_peripheral( clk, reset, cs, ADC_EOC, ADC_CS, ADC_CSTART, end else begin initB<=1; - w_st0<= 2; + w_st0<= 3; end end - end - 2: begin loadB <= 1; w_st0<= 0; end + end + 3: begin loadB <= 1; w_st0<= 4; end + 4: begin loadB <= 0; initB<=0; w_st0<= 0; end endcase end // Reception Buffer always @(posedge clk) if(reset) - {we2, w_st2, fullB, SIZEB2} <= 0; + {we2, w_st2, fullB, SIZEB1, SIZEB2} <= 0; else begin case (w_st2) 0: begin fullB <= 0; if(initB) begin w_st2 <= 1; + SIZEB1<=SIZEB; SIZEB2<=SIZEB; end - end + end 1: begin if(loadB) begin // If buffer full set fullB flag by a clock cicle - if(SIZEB2) begin + if(SIZEB2>0) begin w_st2 <= 2; end else begin fullB <= 1; @@ -233,15 +244,15 @@ module ADC_peripheral( clk, reset, cs, ADC_EOC, ADC_CS, ADC_CSTART, end 2: begin //Write data on BRAM (LOW) - wrBus2 <= out_buffer[7:0]; - addr2 <= 4+2*(SIZEB-SIZEB2); + wrBus2[7:0] <= out_buffer[7:0]; + addr2 <= 4+2*(SIZEB1-SIZEB2); we2 <= 1; w_st2 <= 3; end 3: begin we2 <= 0; w_st2 <= 4; end 4: begin //Write data on BRAM (HI) - wrBus2 <= out_buffer[9:8]; - addr2 <= 5+2*(SIZEB-SIZEB2); + wrBus2[7:0] <= {CMD_OFFSETt,2'b00,out_buffer[9:8]}; + addr2 <= 5+2*(SIZEB1-SIZEB2); we2 <= 1; w_st2 <= 5; end 5: begin @@ -249,5 +260,21 @@ module ADC_peripheral( clk, reset, cs, ADC_EOC, ADC_CS, ADC_CSTART, end endcase end - + + // ADC channel offset, counter MOD8 + always @(posedge clk) + if(fullB | reset) + CMD_OFFSET <= 0; + else if(loadB) begin + CMD_OFFSET <= CMD_OFFSET + 1; + end + + // MUX to select the channel offset + assign CMD_OFFSETt = CMD_SW[1]? (CMD_SW[0]? CMD_OFFSET[2:0] : + CMD_OFFSET[1:0] ) + : (CMD_SW[0]? CMD_OFFSET[0] : + 3'b0 ); + + // Add ADC command and offset + assign CMD_ADCt = CMD_ADC + CMD_OFFSETt; endmodule diff --git a/Examples/ADC/logic/ADC_peripheral_tb.v b/Examples/ADC/logic/ADC_peripheral_tb.v new file mode 100644 index 0000000..1b9f322 --- /dev/null +++ b/Examples/ADC/logic/ADC_peripheral_tb.v @@ -0,0 +1,263 @@ +`timescale 1ns / 1ps + +//////////////////////////////////////////////////////////////////////////////// +// Company: +// Engineer: +// +// Create Date: 17:22:07 04/12/2010 +// Design Name: ADC_peripheral +// Module Name: /home/juan64bits/ebd/ECB/nn-usb-fpga/Examples/ADC/logicISE/ADC_peripheral_tb.v +// Project Name: logicISE +// Target Device: +// Tool versions: +// Description: +// +// Verilog Test Fixture created by ISE for module: ADC_peripheral +// +// Dependencies: +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// +//////////////////////////////////////////////////////////////////////////////// + +module ADC_peripheral_tb; + + // Inputs + reg clk; + reg reset; + reg cs; + reg ADC_EOC; + reg [10:0] addr; + reg [7:0] wrBus; + reg we; + + // Outputs + wire ADC_CS; + wire ADC_CSTART; + wire ADC_SCLK; + wire [7:0] rdBus; + + // Bidirs + wire ADC_SDIN; + wire ADC_SDOUT; + + // Instantiate the Unit Under Test (UUT) + ADC_peripheral uut ( + .clk(clk), + .reset(reset), + .cs(cs), + .ADC_EOC(ADC_EOC), + .ADC_CS(ADC_CS), + .ADC_CSTART(ADC_CSTART), + .ADC_SCLK(ADC_SCLK), + .ADC_SDIN(ADC_SDIN), + .ADC_SDOUT(ADC_SDOUT), + .addr(addr), + .rdBus(rdBus), + .wrBus(wrBus), + .we(we) + ); + + initial begin + // Initialize Inputs + clk = 0; + reset = 0; + cs = 0; + ADC_EOC = 1; + addr = 0; + wrBus = 0; + we = 0; + + // Wait 100 ns for global reset to finish + #100; + + addr = 0; + wrBus = 1; + we = 1; + cs = 1; + #20; + addr = 0; + wrBus = 0; + we = 0; + cs = 0; + #20; + + addr = 1; + wrBus = 8; + we = 1; + cs = 1; + #20; + addr = 0; + wrBus = 0; + we = 0; + cs = 0; + #20; + + addr = 2; + wrBus = 0; + we = 1; + cs = 1; + #20; + addr = 0; + wrBus = 0; + we = 0; + cs = 0; + #20; + + addr = 3; + wrBus = 0; + we = 1; + cs = 1; + #20; + addr = 3; + wrBus = 0; + we = 0; + cs = 0; + #20; + + addr = 3; + wrBus = 8'h39; + we = 1; + cs = 1; + #20; + addr = 3; + wrBus = 0; + we = 0; + cs = 1; + #20; + + while(rdBus[5]) + begin + #20; + end + #100; + addr = 3; + wrBus = 8'h39; + we = 1; + cs = 1; + #20; + addr = 3; + wrBus = 0; + we = 0; + cs = 1; + #20; + + while(rdBus[5]) + begin + #20; + end + #100; + addr = 0; + wrBus = 2; + we = 1; + cs = 1; + #20; + addr = 0; + wrBus = 0; + we = 0; + cs = 0; + #20; + + addr = 1; + wrBus = 10; + we = 1; + cs = 1; + #20; + addr = 0; + wrBus = 0; + we = 0; + cs = 0; + #20; + + addr = 2; + wrBus = 0; + we = 1; + cs = 1; + #20; + addr = 0; + wrBus = 0; + we = 0; + cs = 0; + #20; + + addr = 3; + wrBus = 8'h2B; + we = 1; + cs = 1; + #20; + addr = 3; + wrBus = 0; + we = 0; + cs = 1; + #20; + + while(rdBus[5]) + begin + #20; + end + #100; + + addr = 1; + wrBus = 15; + we = 1; + cs = 1; + #20; + addr = 0; + wrBus = 0; + we = 0; + cs = 0; + #20; + + addr = 3; + wrBus = 8'h2C; + we = 1; + cs = 1; + #20; + addr = 3; + wrBus = 0; + we = 0; + cs = 1; + #20; + + while(rdBus[5]) + begin + #20; + end + #100; + + addr = 1; + wrBus = 20; + we = 1; + cs = 1; + #20; + addr = 0; + wrBus = 0; + we = 0; + cs = 0; + #20; + + addr = 3; + wrBus = 8'h2D; + we = 1; + cs = 1; + #20; + addr = 3; + wrBus = 0; + we = 0; + cs = 1; + #20; + + while(rdBus[5]) + begin + #20; + end + #100; + end + +// Match Xport 2.0 50 MHz clock on FPGA (20ns period) +always begin clk = ~clk; #10; end + +endmodule + diff --git a/docs/wiki/.~lock.ADC.odg# b/docs/wiki/.~lock.ADC.odg# new file mode 100644 index 0000000..0215ba5 --- /dev/null +++ b/docs/wiki/.~lock.ADC.odg# @@ -0,0 +1 @@ +Juan64Bits ,juan64bits,Maximus,12.04.2010 16:34,file:///home/juan64bits/.openoffice.org/3; \ No newline at end of file diff --git a/docs/wiki/ADC.odg b/docs/wiki/ADC.odg index 43f4f288225eafc7e687740f4bd9d8f30cb665f5..1bf0da81271526dd59cd957b86627bdb77a39a92 100644 GIT binary patch delta 18609 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