OpenCores
URL https://opencores.org/ocsvn/can/can/trunk

Subversion Repositories can

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 16 to Rev 17
    Reverse comparison

Rev 16 → Rev 17

/trunk/bench/verilog/can_testbench.v
45,6 → 45,9
// CVS Revision History
//
// $Log: not supported by cvs2svn $
// Revision 1.11 2003/01/14 12:19:29 mohor
// rx_fifo is now working.
//
// Revision 1.10 2003/01/10 17:51:28 mohor
// Temporary version (backup).
//
145,35 → 148,35
wait(start_tb);
 
// Set bus timing register 0
write_register(8'h6, {`CAN_TIMING0_SJW, `CAN_TIMING0_BRP});
write_register(8'd6, {`CAN_TIMING0_SJW, `CAN_TIMING0_BRP});
 
// Set bus timing register 1
write_register(8'h7, {`CAN_TIMING1_SAM, `CAN_TIMING1_TSEG2, `CAN_TIMING1_TSEG1});
write_register(8'd7, {`CAN_TIMING1_SAM, `CAN_TIMING1_TSEG2, `CAN_TIMING1_TSEG1});
 
 
 
// Set Clock Divider register
write_register(8'h31, {`CAN_CLOCK_DIVIDER_MODE, 7'h0}); // Setting the normal mode (not extended)
write_register(8'd31, {`CAN_CLOCK_DIVIDER_MODE, 7'h0}); // Setting the normal mode (not extended)
// Set Acceptance Code and Acceptance Mask registers (their address differs for basic and extended mode
if(`CAN_CLOCK_DIVIDER_MODE) // Extended mode
begin
// Set Acceptance Code and Acceptance Mask registers
write_register(8'h16, 8'ha6); // acceptance code 0
write_register(8'h17, 8'hb0); // acceptance code 1
write_register(8'h18, 8'h12); // acceptance code 2
write_register(8'h19, 8'h34); // acceptance code 3
write_register(8'h20, 8'h0); // acceptance mask 0
write_register(8'h21, 8'h0); // acceptance mask 1
write_register(8'h22, 8'h0); // acceptance mask 2
write_register(8'h23, 8'h0); // acceptance mask 3
write_register(8'd16, 8'ha6); // acceptance code 0
write_register(8'd17, 8'hb0); // acceptance code 1
write_register(8'd18, 8'h12); // acceptance code 2
write_register(8'd19, 8'h34); // acceptance code 3
write_register(8'd20, 8'h0); // acceptance mask 0
write_register(8'd21, 8'h0); // acceptance mask 1
write_register(8'd22, 8'h0); // acceptance mask 2
write_register(8'd23, 8'h0); // acceptance mask 3
end
else
begin
// Set Acceptance Code and Acceptance Mask registers
// write_register(8'h4, 8'ha6); // acceptance code
write_register(8'h4, 8'h08); // acceptance code
write_register(8'h5, 8'h00); // acceptance mask
// write_register(8'd4, 8'ha6); // acceptance code
write_register(8'd4, 8'h08); // acceptance code
write_register(8'd5, 8'h00); // acceptance mask
end
#10;
180,7 → 183,7
repeat (1000) @ (posedge clk);
// Switch-off reset mode
write_register(8'h0, {7'h0, ~(`CAN_MODE_RESET)});
write_register(8'd0, {7'h0, ~(`CAN_MODE_RESET)});
 
repeat (BRP) @ (posedge clk); // At least BRP clocks needed before bus goes to dominant level. Otherwise 1 quant difference is possible
// This difference is resynchronized later.
413,7 → 416,7
cs = 1;
rw = 1;
@ (posedge clk);
$display("(%0t) Reading register [0x%0x] = 0x%0x", $time, addr, data_out);
$display("(%0t) Reading register [%0d] = 0x%0x", $time, addr, data_out);
#1;
addr = 'hz;
cs = 0;
448,7 → 451,7
begin
if(`CAN_CLOCK_DIVIDER_MODE) // Extended mode
begin
for (i=8'h16; i<=8'h28; i=i+1)
for (i=8'd16; i<=8'd28; i=i+1)
read_register(i);
if (can_testbench.i_can_top.i_can_bsp.i_can_fifo.overrun_info[can_testbench.i_can_top.i_can_bsp.i_can_fifo.rd_info_pointer])
$display("\nWARNING: This packet was received with overrun.");
455,7 → 458,7
end
else
begin
for (i=8'h20; i<=8'h29; i=i+1)
for (i=8'd20; i<=8'd29; i=i+1)
read_register(i);
if (can_testbench.i_can_top.i_can_bsp.i_can_fifo.overrun_info[can_testbench.i_can_top.i_can_bsp.i_can_fifo.rd_info_pointer])
$display("\nWARNING: This packet was received with overrun.");
466,7 → 469,7
 
task release_rx_buffer;
begin
write_register(8'h1, 8'h4);
write_register(8'd1, 8'h4);
$display("(%0t) Rx buffer released.", $time);
repeat (2) @ (posedge clk); // Time to decrement all the counters
end
527,7 → 530,6
integer stuff_cnt;
reg [117:0] data;
reg previous_bit;
reg xxx;
reg stuff;
begin
 
564,9 → 566,6
 
for (cnt=0; cnt<=total_bits; cnt=cnt+1)
begin
xxx = data[pointer];
if (stuff_cnt == 5)
begin
stuff_cnt = 1;
/trunk/rtl/verilog/can_top.v
45,6 → 45,9
// CVS Revision History
//
// $Log: not supported by cvs2svn $
// Revision 1.7 2003/01/10 17:51:34 mohor
// Temporary version (backup).
//
// Revision 1.6 2003/01/09 21:54:45 mohor
// rx fifo added. Not 100 % verified, yet.
//
142,6 → 145,21
wire [7:0] acceptance_mask_3;
/* End: This section is for EXTENDED mode */
 
/* Tx data registers. Holding identifier (basic mode), tx frame information (extended mode) and data */
wire [7:0] tx_data_0;
wire [7:0] tx_data_1;
wire [7:0] tx_data_2;
wire [7:0] tx_data_3;
wire [7:0] tx_data_4;
wire [7:0] tx_data_5;
wire [7:0] tx_data_6;
wire [7:0] tx_data_7;
wire [7:0] tx_data_8;
wire [7:0] tx_data_9;
wire [7:0] tx_data_10;
wire [7:0] tx_data_11;
wire [7:0] tx_data_12;
/* End: Tx data registers */
 
 
/* Connecting can_registers module */
200,14 → 218,30
/* Acceptance mask register */
.acceptance_mask_1(acceptance_mask_1),
.acceptance_mask_2(acceptance_mask_2),
.acceptance_mask_3(acceptance_mask_3)
.acceptance_mask_3(acceptance_mask_3),
/* End: This section is for EXTENDED mode */
 
/* Tx data registers. Holding identifier (basic mode), tx frame information (extended mode) and data */
.tx_data_0(tx_data_0),
.tx_data_1(tx_data_1),
.tx_data_2(tx_data_2),
.tx_data_3(tx_data_3),
.tx_data_4(tx_data_4),
.tx_data_5(tx_data_5),
.tx_data_6(tx_data_6),
.tx_data_7(tx_data_7),
.tx_data_8(tx_data_8),
.tx_data_9(tx_data_9),
.tx_data_10(tx_data_10),
.tx_data_11(tx_data_11),
.tx_data_12(tx_data_12)
/* End: Tx data registers */
 
 
 
 
 
 
);
 
 
317,7 → 351,7
// Multiplexing data_out from registers and rx fifo
always @ (extended_mode or addr)
begin
if (extended_mode & ((addr >= 8'h16) && (addr <= 8'h28)) | (~extended_mode) & ((addr >= 8'h20) && (addr <= 8'h29)))
if (extended_mode & (~reset_mode) & ((addr >= 8'd16) && (addr <= 8'd28)) | (~extended_mode) & ((addr >= 8'd20) && (addr <= 8'd29)))
data_out_fifo_selected <= 1'b1;
else
data_out_fifo_selected <= 1'b0;
/trunk/rtl/verilog/can_fifo.v
45,6 → 45,9
// CVS Revision History
//
// $Log: not supported by cvs2svn $
// Revision 1.4 2003/01/14 12:19:35 mohor
// rx_fifo is now working.
//
// Revision 1.3 2003/01/09 21:54:45 mohor
// rx fifo added. Not 100 % verified, yet.
//
250,11 → 253,11
begin
if (extended_mode) // extended mode
begin
read_address <= rd_pointer + (addr - 8'h16);
read_address <= rd_pointer + (addr - 8'd16);
end
else // normal mode
begin
read_address <= rd_pointer + (addr - 8'h20);
read_address <= rd_pointer + (addr - 8'd20);
end
end
 
/trunk/rtl/verilog/can_registers.v
45,6 → 45,9
// CVS Revision History
//
// $Log: not supported by cvs2svn $
// Revision 1.7 2003/01/14 12:19:35 mohor
// rx_fifo is now working.
//
// Revision 1.6 2003/01/10 17:51:34 mohor
// Temporary version (backup).
//
128,9 → 131,24
/* Acceptance mask register */
acceptance_mask_1,
acceptance_mask_2,
acceptance_mask_3
acceptance_mask_3,
/* End: This section is for EXTENDED mode */
/* Tx data registers. Holding identifier (basic mode), tx frame information (extended mode) and data */
tx_data_0,
tx_data_1,
tx_data_2,
tx_data_3,
tx_data_4,
tx_data_5,
tx_data_6,
tx_data_7,
tx_data_8,
tx_data_9,
tx_data_10,
tx_data_11,
tx_data_12
/* End: Tx data registers */
 
202,32 → 220,61
 
/* End: This section is for EXTENDED mode */
 
/* Tx data registers. Holding identifier (basic mode), tx frame information (extended mode) and data */
output [7:0] tx_data_0;
output [7:0] tx_data_1;
output [7:0] tx_data_2;
output [7:0] tx_data_3;
output [7:0] tx_data_4;
output [7:0] tx_data_5;
output [7:0] tx_data_6;
output [7:0] tx_data_7;
output [7:0] tx_data_8;
output [7:0] tx_data_9;
output [7:0] tx_data_10;
output [7:0] tx_data_11;
output [7:0] tx_data_12;
/* End: Tx data registers */
 
 
 
 
wire we_mode = cs & (~rw) & (addr == 8'h0);
wire we_command = cs & (~rw) & (addr == 8'h1);
wire we_bus_timing_0 = cs & (~rw) & (addr == 8'h6) & reset_mode;
wire we_bus_timing_1 = cs & (~rw) & (addr == 8'h7) & reset_mode;
wire we_clock_divider_hi = cs & (~rw) & (addr == 8'h31) & reset_mode;
wire we_clock_divider_low = cs & (~rw) & (addr == 8'h31);
wire we_mode = cs & (~rw) & (addr == 8'd0);
wire we_command = cs & (~rw) & (addr == 8'd1);
wire we_bus_timing_0 = cs & (~rw) & (addr == 8'd6) & reset_mode;
wire we_bus_timing_1 = cs & (~rw) & (addr == 8'd7) & reset_mode;
wire we_clock_divider_low = cs & (~rw) & (addr == 8'd31);
wire we_clock_divider_hi = we_clock_divider_low & reset_mode;
 
wire read = cs & rw;
 
 
/* This section is for BASIC and EXTENDED mode */
wire we_acceptance_code_0 = cs & (~rw) & reset_mode & ((~extended_mode) & (addr == 8'h4) | extended_mode & (addr == 8'h16));
wire we_acceptance_mask_0 = cs & (~rw) & reset_mode & ((~extended_mode) & (addr == 8'h5) | extended_mode & (addr == 8'h20));
wire we_acceptance_code_0 = cs & (~rw) & reset_mode & ((~extended_mode) & (addr == 8'd4) | extended_mode & (addr == 8'd16));
wire we_acceptance_mask_0 = cs & (~rw) & reset_mode & ((~extended_mode) & (addr == 8'd5) | extended_mode & (addr == 8'd20));
wire we_tx_data_0 = cs & (~rw) & (~reset_mode) & ((~extended_mode) & (addr == 8'd10) | extended_mode & (addr == 8'd16));
wire we_tx_data_1 = cs & (~rw) & (~reset_mode) & ((~extended_mode) & (addr == 8'd11) | extended_mode & (addr == 8'd17));
wire we_tx_data_2 = cs & (~rw) & (~reset_mode) & ((~extended_mode) & (addr == 8'd12) | extended_mode & (addr == 8'd18));
wire we_tx_data_3 = cs & (~rw) & (~reset_mode) & ((~extended_mode) & (addr == 8'd13) | extended_mode & (addr == 8'd19));
wire we_tx_data_4 = cs & (~rw) & (~reset_mode) & ((~extended_mode) & (addr == 8'd14) | extended_mode & (addr == 8'd20));
wire we_tx_data_5 = cs & (~rw) & (~reset_mode) & ((~extended_mode) & (addr == 8'd15) | extended_mode & (addr == 8'd21));
wire we_tx_data_6 = cs & (~rw) & (~reset_mode) & ((~extended_mode) & (addr == 8'd16) | extended_mode & (addr == 8'd22));
wire we_tx_data_7 = cs & (~rw) & (~reset_mode) & ((~extended_mode) & (addr == 8'd17) | extended_mode & (addr == 8'd23));
wire we_tx_data_8 = cs & (~rw) & (~reset_mode) & ((~extended_mode) & (addr == 8'd18) | extended_mode & (addr == 8'd24));
wire we_tx_data_9 = cs & (~rw) & (~reset_mode) & ((~extended_mode) & (addr == 8'd19) | extended_mode & (addr == 8'd25));
wire we_tx_data_10 = cs & (~rw) & (~reset_mode) & ( extended_mode & (addr == 8'd26));
wire we_tx_data_11 = cs & (~rw) & (~reset_mode) & ( extended_mode & (addr == 8'd27));
wire we_tx_data_12 = cs & (~rw) & (~reset_mode) & ( extended_mode & (addr == 8'd28));
/* End: This section is for BASIC and EXTENDED mode */
 
 
/* This section is for EXTENDED mode */
wire we_acceptance_code_1 = cs & (~rw) & (addr == 8'h17) & reset_mode & extended_mode;
wire we_acceptance_code_2 = cs & (~rw) & (addr == 8'h18) & reset_mode & extended_mode;
wire we_acceptance_code_3 = cs & (~rw) & (addr == 8'h19) & reset_mode & extended_mode;
wire we_acceptance_mask_1 = cs & (~rw) & (addr == 8'h21) & reset_mode & extended_mode;
wire we_acceptance_mask_2 = cs & (~rw) & (addr == 8'h22) & reset_mode & extended_mode;
wire we_acceptance_mask_3 = cs & (~rw) & (addr == 8'h23) & reset_mode & extended_mode;
wire we_acceptance_code_1 = cs & (~rw) & (addr == 8'd17) & reset_mode & extended_mode;
wire we_acceptance_code_2 = cs & (~rw) & (addr == 8'd18) & reset_mode & extended_mode;
wire we_acceptance_code_3 = cs & (~rw) & (addr == 8'd19) & reset_mode & extended_mode;
wire we_acceptance_mask_1 = cs & (~rw) & (addr == 8'd21) & reset_mode & extended_mode;
wire we_acceptance_mask_2 = cs & (~rw) & (addr == 8'd22) & reset_mode & extended_mode;
wire we_acceptance_mask_3 = cs & (~rw) & (addr == 8'd23) & reset_mode & extended_mode;
/* End: This section is for EXTENDED mode */
 
 
349,12 → 396,143
.we(we_acceptance_mask_0),
.clk(clk)
);
/* End: Acceptance code register */
 
/* End: Acceptance mask register */
/* End: This section is for BASIC and EXTENDED mode */
 
 
/* Tx data 0 register. */
can_register #(8) TX_DATA_REG0
( .data_in(data_in),
.data_out(tx_data_0),
.we(we_tx_data_0),
.clk(clk)
);
/* End: Tx data 0 register. */
 
 
/* Tx data 1 register. */
can_register #(8) TX_DATA_REG1
( .data_in(data_in),
.data_out(tx_data_1),
.we(we_tx_data_1),
.clk(clk)
);
/* End: Tx data 1 register. */
 
 
/* Tx data 2 register. */
can_register #(8) TX_DATA_REG2
( .data_in(data_in),
.data_out(tx_data_2),
.we(we_tx_data_2),
.clk(clk)
);
/* End: Tx data 2 register. */
 
 
/* Tx data 3 register. */
can_register #(8) TX_DATA_REG3
( .data_in(data_in),
.data_out(tx_data_3),
.we(we_tx_data_3),
.clk(clk)
);
/* End: Tx data 3 register. */
 
 
/* Tx data 4 register. */
can_register #(8) TX_DATA_REG4
( .data_in(data_in),
.data_out(tx_data_4),
.we(we_tx_data_4),
.clk(clk)
);
/* End: Tx data 4 register. */
 
 
/* Tx data 5 register. */
can_register #(8) TX_DATA_REG5
( .data_in(data_in),
.data_out(tx_data_5),
.we(we_tx_data_5),
.clk(clk)
);
/* End: Tx data 5 register. */
 
 
/* Tx data 6 register. */
can_register #(8) TX_DATA_REG6
( .data_in(data_in),
.data_out(tx_data_6),
.we(we_tx_data_6),
.clk(clk)
);
/* End: Tx data 6 register. */
 
 
/* Tx data 7 register. */
can_register #(8) TX_DATA_REG7
( .data_in(data_in),
.data_out(tx_data_7),
.we(we_tx_data_7),
.clk(clk)
);
/* End: Tx data 7 register. */
 
 
/* Tx data 8 register. */
can_register #(8) TX_DATA_REG8
( .data_in(data_in),
.data_out(tx_data_8),
.we(we_tx_data_8),
.clk(clk)
);
/* End: Tx data 8 register. */
 
 
/* Tx data 9 register. */
can_register #(8) TX_DATA_REG9
( .data_in(data_in),
.data_out(tx_data_9),
.we(we_tx_data_9),
.clk(clk)
);
/* End: Tx data 9 register. */
 
 
/* Tx data 10 register. */
can_register #(8) TX_DATA_REG10
( .data_in(data_in),
.data_out(tx_data_10),
.we(we_tx_data_10),
.clk(clk)
);
/* End: Tx data 10 register. */
 
 
/* Tx data 11 register. */
can_register #(8) TX_DATA_REG11
( .data_in(data_in),
.data_out(tx_data_11),
.we(we_tx_data_11),
.clk(clk)
);
/* End: Tx data 11 register. */
 
 
/* Tx data 12 register. */
can_register #(8) TX_DATA_REG12
( .data_in(data_in),
.data_out(tx_data_12),
.we(we_tx_data_12),
.clk(clk)
);
/* End: Tx data 12 register. */
 
 
 
 
 
/* This section is for EXTENDED mode */
 
/* Acceptance code register 1 */
427,10 → 605,7
 
 
 
wire [7:0] fix_me = 8'h0; // This wire is used in many exuations that are not final, yet. Fix them !!!
 
 
 
// Reading data from registers
always @ ( addr or read or extended_mode or mode or bus_timing_0 or bus_timing_1 or clock_divider
)
440,20 → 615,25
if (extended_mode) // EXTENDED mode (Different register map depends on mode)
begin
case(addr)
8'h0 : data_out <= mode;
8'h1 : data_out <= 8'h0;
8'h6 : data_out <= bus_timing_0;
8'h7 : data_out <= bus_timing_1;
8'h16 : data_out <= reset_mode? acceptance_code_0 : fix_me; // + fix TX identifiers
8'h17 : data_out <= reset_mode? acceptance_code_1 : fix_me;
8'h18 : data_out <= reset_mode? acceptance_code_2 : fix_me;
8'h19 : data_out <= reset_mode? acceptance_code_3 : fix_me;
8'h20 : data_out <= reset_mode? acceptance_mask_0 : fix_me;
8'h21 : data_out <= reset_mode? acceptance_mask_1 : fix_me;
8'h22 : data_out <= reset_mode? acceptance_mask_2 : fix_me;
8'h23 : data_out <= reset_mode? acceptance_mask_3 : fix_me;
8'd0 : data_out <= mode;
8'd1 : data_out <= 8'h0;
8'd6 : data_out <= bus_timing_0;
8'd7 : data_out <= bus_timing_1;
8'd16 : data_out <= acceptance_code_0;
8'd17 : data_out <= acceptance_code_1;
8'd18 : data_out <= acceptance_code_2;
8'd19 : data_out <= acceptance_code_3;
8'd20 : data_out <= acceptance_mask_0;
8'd21 : data_out <= acceptance_mask_1;
8'd22 : data_out <= acceptance_mask_2;
8'd23 : data_out <= acceptance_mask_3;
8'd24 : data_out <= 8'h0;
8'd25 : data_out <= 8'h0;
8'd26 : data_out <= 8'h0;
8'd27 : data_out <= 8'h0;
8'd28 : data_out <= 8'h0;
8'h31 : data_out <= {clock_divider[7:5], 1'b0, clock_divider[3:0]};
8'd31 : data_out <= {clock_divider[7:5], 1'b0, clock_divider[3:0]};
default: data_out <= 8'h0;
endcase
461,15 → 641,24
else // BASIC mode
begin
case(addr)
8'h0 : data_out <= mode;
8'h1 : data_out <= 8'hff;
8'h4 : data_out <= reset_mode? acceptance_code_0 : 8'hff;
8'h5 : data_out <= reset_mode? acceptance_mask_0 : 8'hff;
8'h6 : data_out <= reset_mode? bus_timing_0 : 8'hff;
8'h7 : data_out <= reset_mode? bus_timing_1 : 8'hff;
8'd0 : data_out <= mode;
8'd1 : data_out <= 8'hff;
8'd4 : data_out <= reset_mode? acceptance_code_0 : 8'hff;
8'd5 : data_out <= reset_mode? acceptance_mask_0 : 8'hff;
8'd6 : data_out <= reset_mode? bus_timing_0 : 8'hff;
8'd7 : data_out <= reset_mode? bus_timing_1 : 8'hff;
8'd10 : data_out <= reset_mode? 8'hff : tx_data_0;
8'd11 : data_out <= reset_mode? 8'hff : tx_data_0;
8'd12 : data_out <= reset_mode? 8'hff : tx_data_0;
8'd13 : data_out <= reset_mode? 8'hff : tx_data_0;
8'd14 : data_out <= reset_mode? 8'hff : tx_data_0;
8'd15 : data_out <= reset_mode? 8'hff : tx_data_0;
8'd16 : data_out <= reset_mode? 8'hff : tx_data_0;
8'd17 : data_out <= reset_mode? 8'hff : tx_data_0;
8'd18 : data_out <= reset_mode? 8'hff : tx_data_0;
8'd19 : data_out <= reset_mode? 8'hff : tx_data_0;
8'd31 : data_out <= {clock_divider[7:5], 1'b0, clock_divider[3:0]};
8'h31 : data_out <= {clock_divider[7:5], 1'b0, clock_divider[3:0]};
default: data_out <= 8'h0;
endcase
end

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.