diff options
| author | Josh Blum <josh@joshknows.com> | 2010-11-23 13:50:37 -0800 | 
|---|---|---|
| committer | Josh Blum <josh@joshknows.com> | 2010-11-23 13:50:37 -0800 | 
| commit | 30ce5acedd3e0dc6fc97d7597781a0a4828812f2 (patch) | |
| tree | 28d010c0938121f587e1820849c34ee900e7f74b /fpga/usrp2/models | |
| parent | 8ce75a3ca7a51f4bdee87d78a610a0f2519473ae (diff) | |
| parent | 13ae4786e091d5581baf31c9967dca822ef15e39 (diff) | |
| download | uhd-30ce5acedd3e0dc6fc97d7597781a0a4828812f2.tar.gz uhd-30ce5acedd3e0dc6fc97d7597781a0a4828812f2.tar.bz2 uhd-30ce5acedd3e0dc6fc97d7597781a0a4828812f2.zip | |
Merge branch 'usrp_e100' into next
Conflicts:
	images/Makefile
Diffstat (limited to 'fpga/usrp2/models')
| -rw-r--r-- | fpga/usrp2/models/gpmc_model_async.v | 130 | ||||
| -rw-r--r-- | fpga/usrp2/models/gpmc_model_sync.v | 97 | 
2 files changed, 227 insertions, 0 deletions
| diff --git a/fpga/usrp2/models/gpmc_model_async.v b/fpga/usrp2/models/gpmc_model_async.v new file mode 100644 index 000000000..beeaee028 --- /dev/null +++ b/fpga/usrp2/models/gpmc_model_async.v @@ -0,0 +1,130 @@ +`timescale 1ps/1ps + +module gpmc_model_async +  (output EM_CLK, inout [15:0] EM_D, output reg [10:1] EM_A, output reg [1:0] EM_NBE, +   output reg EM_WAIT0, output reg EM_NCS4, output reg EM_NCS6,  +   output reg EM_NWE, output reg EM_NOE ); + +   assign EM_CLK = 0; +   reg [15:0] EM_D_int; +   assign EM_D = EM_D_int; +    +   initial +     begin +	EM_A <= 10'bz; +	EM_NBE <= 2'b11; +	EM_NWE <= 1; +	EM_NOE <= 1; +	EM_NCS4 <= 1; +	EM_NCS6 <= 1; +	EM_D_int <= 16'bz; + 	EM_WAIT0 <= 0;  // FIXME this is actually an input +     end +    +   task GPMC_Write; +      input ctrl; +      input [10:0] addr; +      input [15:0] data; +      begin +	 #23000; +	 EM_A <= addr[10:1]; +	 EM_D_int <= data; +	 #20100; +	 if(ctrl) +	   EM_NCS6 <= 0; +	 else +	   EM_NCS4 <= 0; +	 #14000; +	 EM_NWE <= 0; +	 #77500; +	 EM_NCS4 <= 1; +	 EM_NCS6 <= 1; +	 //#1.5; +	 EM_NWE <= 1; +	 #60000; +	 EM_A <= 10'bz; +	 EM_D_int <= 16'bz; +      end +   endtask // GPMC_Write + +   task GPMC_Read; +      input ctrl; +      input [10:0] addr; +      begin +	 #13000; +	 EM_A <= addr[10:1]; +	 #3000; +	 if(ctrl) +	   EM_NCS6 <= 0; +	 else +	   EM_NCS4 <= 0; +	 #14000; +	 EM_NOE <= 0; +	 #77500; +	 EM_NCS4 <= 1; +	 EM_NCS6 <= 1; +	 //#1.5; +	 $display("Data Read from GPMC: %X",EM_D); +	 EM_NOE <= 1; +	 #254000; +	 EM_A <= 10'bz; +      end +   endtask // GPMC_Read +    +   initial +     begin +	#1000000; +	GPMC_Write(1,36,16'hF00D); +	#1000000; +	GPMC_Read(1,36); +	#1000000; +	GPMC_Write(0,0,16'h1234); +	GPMC_Write(0,0,16'h5678); +	GPMC_Write(0,0,16'h9abc); +	GPMC_Write(0,0,16'hF00D); +	GPMC_Write(0,0,16'hDEAD); +	GPMC_Write(0,0,16'hDEAD); +	GPMC_Write(0,0,16'hDEAD); +	GPMC_Write(0,0,16'hDEAD); +	GPMC_Write(0,0,16'hDEAD); +	GPMC_Write(0,0,16'hDEAD); +	#1000000; +	GPMC_Write(0,0,16'h1234); +	GPMC_Write(0,0,16'h5678); +	GPMC_Write(0,0,16'h9abc); +	GPMC_Write(0,0,16'hF00D); +	GPMC_Write(0,0,16'hDEAD); +	GPMC_Write(0,0,16'hDEAD); +	GPMC_Write(0,0,16'hDEAD); +	GPMC_Write(0,0,16'hDEAD); +	GPMC_Write(0,0,16'hDEAD); +	GPMC_Write(0,0,16'h9876); +	#1000000; +	GPMC_Read(0,0); +	GPMC_Read(0,0); +	GPMC_Read(0,0); +	GPMC_Read(0,0); +	GPMC_Read(0,0); +	GPMC_Read(0,0); +	GPMC_Read(0,0); +	GPMC_Read(0,0); +	GPMC_Read(0,0); +	GPMC_Read(0,0); +	#1000000; +	GPMC_Read(0,0); +	GPMC_Read(0,0); +	GPMC_Read(0,0); +	GPMC_Read(0,0); +	GPMC_Read(0,0); +	GPMC_Read(0,0); +	GPMC_Read(0,0); +	GPMC_Read(0,0); +	GPMC_Read(0,0); +	GPMC_Read(0,0); +	#1000000; +	GPMC_Read(0,0); +	#100000000; +	$finish; +     end +    +endmodule // gpmc_model_async diff --git a/fpga/usrp2/models/gpmc_model_sync.v b/fpga/usrp2/models/gpmc_model_sync.v new file mode 100644 index 000000000..641720c15 --- /dev/null +++ b/fpga/usrp2/models/gpmc_model_sync.v @@ -0,0 +1,97 @@ + + +module gpmc_model_sync +  (output reg EM_CLK, inout [15:0] EM_D, output reg [10:1] EM_A, output reg [1:0] EM_NBE, +   output reg EM_WAIT0, output reg EM_NCS4, output reg EM_NCS6,  +   output reg EM_NWE, output reg EM_NOE ); + +   reg [15:0] EM_D_int; +   assign EM_D = EM_D_int; + +   initial +     begin +	EM_CLK <= 0; +	EM_A <= 10'bz; +	EM_NBE <= 2'b11; +	EM_NWE <= 1; +	EM_NOE <= 1; +	EM_NCS4 <= 1; +	EM_NCS6 <= 1; +	EM_D_int <= 16'bz; + 	EM_WAIT0 <= 0;  // FIXME this is actually an input +     end +    +   task GPMC_Write; +      input ctrl; +      input [10:0] addr; +      input [15:0] data; +      begin +	 EM_CLK <= 1; +	 #10; +	 EM_CLK <= 0; +	 EM_NWE <= 0; +	 if(ctrl) +	   EM_NCS6 <= 0; +	 else +	   EM_NCS4 <= 0; +	 EM_A <= addr[10:1]; +	 EM_D_int <= data; +	 #10; +	 EM_CLK <= 1; +	 #10; +	 EM_CLK <= 0; +	 EM_NWE <= 1; +	 EM_NCS4 <= 1; +	 EM_NCS6 <= 1; +	 EM_A <= 10'bz; +	 EM_D_int <= 16'bz; +	 #100; +      end +   endtask // GPMC_Write + +   task GPMC_Read; +      input ctrl; +      input [10:0] addr; +      begin +	 #1.3; +	 EM_A <= addr[10:1]; +	 #3; +	 if(ctrl) +	   EM_NCS6 <= 0; +	 else +	   EM_NCS4 <= 0; +	 #14; +	 EM_NOE <= 0; +	 #77.5; +	 EM_NCS4 <= 1; +	 EM_NCS6 <= 1; +	 //#1.5; +	 $display("Data Read from GPMC: %X",EM_D); +	 EM_NOE <= 1; +	 #254; +	 EM_A <= 10'bz; +      end +   endtask // GPMC_Read +    +   initial +     begin +	#1000; +	GPMC_Write(1,36,16'hF00D); +	#1000; +	GPMC_Read(1,36); +	#1000; +	GPMC_Write(0,36,16'h1234); +	GPMC_Write(0,38,16'h5678); +	GPMC_Write(0,40,16'h9abc); +	GPMC_Write(0,11'h2F4,16'hF00D); +	GPMC_Write(0,11'h7FE,16'hDEAD); +	GPMC_Write(0,11'h7FE,16'hDEAD); +	GPMC_Write(0,11'h7FE,16'hDEAD); +	GPMC_Write(0,11'h7FE,16'hDEAD); +	GPMC_Write(0,11'h7FE,16'hDEAD); +	GPMC_Write(0,11'h7FE,16'hDEAD); +	#100000; +	$finish; +     end +    +endmodule // gpmc_model | 
