Ever since using Intan RHD chips, we've been using a modified version of Intan's Rhythm firmware and API to communicate with the headstages.
While the Open Ephys acquisition board mostly works with the standard intan firmware, there are a few subtle changes. (The Open Ephys software however uses the standard intan API will work directly with the intan system and vice versa).
- the RGB status LEDs require a specific driver
- our analog in chips differ from those used by intan, so a different controller code needs to be used.
Here is a list of changes made on top of the firmware version 1.4 (26 February 2014) :
xem6010.ucf:
add the pin out for the LED string. All LEDs are driven by just one signal:
NET "LED_OUT" LOC="B14" | IOSTANDARD=LVCMOS33;
main.v:
insert into module main #( in/output definitions :
Instantiate LED controller for the WS2812 string (see LED controller subpage for info on this module).
This code is still pretty much a place holder - add actually useful information and status display here.
//assign LED_OUT = 1'b0; // use to set to 0
// led controller for
// format is 24 bit red,blue,green, least? significant bit first color cor current led
LED_controller WS2812controller(
.dat_out(LED_OUT), // output to led string
.reset(reset),
.clk(clk1), // 100MHz clock
/* .led1(24'b000000000000000000000000),
.led2(24'b000000000000000000000000),
.led3(24'b000000000000000000000000),
.led4(24'b000000000000000000000000),
.led5(24'b000000000000000000000000),
.led6(24'b000000000000000000000000),
.led7(24'b000000000000000000000000),
.led8(24'b101010101010101010101010)
);
*/
.led1({data_stream_7_en_in ? {led_d1_dat,led_d2_dat} : 16'b00000001 ,8'b00000001}), // 4 SPI cable status LEDs
.led2({data_stream_5_en_in ? {led_c1_dat,led_c2_dat} : 16'b10000000 ,8'b10000000}),
.led3({data_stream_3_en_in ? {led_b1_dat,led_b2_dat} : 16'b00000000 ,8'b00000000}),
.led4({data_stream_1_en_in ? {led_a1_dat,led_a2_dat} : 8'b00000001,8'b00000001,8'b00000001}),
.led5({TTL_in,TTL_in,TTL_in}), // TTL in
.led6({TTL_out,TTL_out,TTL_out}), // TTL out
.led7({8'b00000000,8'b00000000,8'b00000000}), // Ain
.led8({DAC_register_1,DAC_register_2,8'b01000000}) //Aout
);
ADC_input.v:
Instead of the Analog Devices AD7680 ADC used by intan, we're using the Texas Instruments DS8325 on our acquisition boards.
The usage of the chips is almost identical, but the data timing is a bit different, requiring a small edit in ADC_input.v - instead of populating the register from channel states 4-19, we're populating from 7-22. Everything else can stay the same.
ms_clk11_a: begin
ADC_SCLK <= 1'b1;
case (channel)
7: begin
ADC_register[15] <= ADC_DOUT;
end
8: begin
ADC_register[14] <= ADC_DOUT;
end
9: begin
ADC_register[13] <= ADC_DOUT;
end
10: begin
ADC_register[12] <= ADC_DOUT;
end
11: begin
ADC_register[11] <= ADC_DOUT;
end
12: begin
ADC_register[10] <= ADC_DOUT;
end
13: begin
ADC_register[9] <= ADC_DOUT;
end
14: begin
ADC_register[8] <= ADC_DOUT;
end
15: begin
ADC_register[7] <= ADC_DOUT;
end
16: begin
ADC_register[6] <= ADC_DOUT;
end
17: begin
ADC_register[5] <= ADC_DOUT;
end
18: begin
ADC_register[4] <= ADC_DOUT;
end
19: begin
ADC_register[3] <= ADC_DOUT;
end
20: begin
ADC_register[2] <= ADC_DOUT;
end
21: begin
ADC_register[1] <= ADC_DOUT;
end
22: begin
ADC_register[0] <= ADC_DOUT;
end
endcase
end