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 151 to Rev 152
    Reverse comparison

Rev 151 → Rev 152

/trunk/rtl/verilog/can_fifo.v
50,6 → 50,9
// CVS Revision History
//
// $Log: not supported by cvs2svn $
// Revision 1.26 2004/02/08 14:30:57 mohor
// Header changed.
//
// Revision 1.25 2003/10/23 16:52:17 mohor
// Active high/low problem when Altera devices are used. Bug fixed by
// Rojhalat Ibrahim.
264,7 → 267,7
else if (write_length_info & (~info_full) | initialize_memories)
wr_info_pointer <=#Tp wr_info_pointer + 1'b1;
else if (reset_mode)
wr_info_pointer <=#Tp 6'h0;
wr_info_pointer <=#Tp rd_info_pointer;
end
 
 
274,8 → 277,6
begin
if (rst)
rd_info_pointer <= 6'h0;
else if (reset_mode)
rd_info_pointer <=#Tp 6'h0;
else if (release_buffer & (~fifo_empty))
rd_info_pointer <=#Tp rd_info_pointer + 1'b1;
end
288,8 → 289,6
rd_pointer <= 5'h0;
else if (release_buffer & (~fifo_empty))
rd_pointer <=#Tp rd_pointer + {2'h0, length_info};
else if (reset_mode)
rd_pointer <=#Tp 5'h0;
end
 
 
298,10 → 297,10
begin
if (rst)
wr_pointer <= 5'h0;
else if (reset_mode)
wr_pointer <=#Tp rd_pointer;
else if (wr & (~fifo_full))
wr_pointer <=#Tp wr_pointer + 1'b1;
else if (reset_mode)
wr_pointer <=#Tp 5'h0;
end
 
 
322,6 → 321,8
begin
if (rst)
fifo_cnt <= 7'h0;
else if (reset_mode)
fifo_cnt <=#Tp 7'h0;
else if (wr & (~release_buffer) & (~fifo_full))
fifo_cnt <=#Tp fifo_cnt + 1'b1;
else if ((~wr) & release_buffer & (~fifo_empty))
328,8 → 329,6
fifo_cnt <=#Tp fifo_cnt - {3'h0, length_info};
else if (wr & release_buffer & (~fifo_full) & (~fifo_empty))
fifo_cnt <=#Tp fifo_cnt - {3'h0, length_info} + 1'b1;
else if (reset_mode)
fifo_cnt <=#Tp 7'h0;
end
 
assign fifo_full = fifo_cnt == 7'd64;
/trunk/rtl/verilog/can_bsp.v
50,6 → 50,11
// CVS Revision History
//
// $Log: not supported by cvs2svn $
// Revision 1.51 2004/11/15 18:23:21 igorm
// When CAN was reset by setting the reset_mode signal in mode register, it
// was possible that CAN was blocked for a short period of time. Problem
// occured very rarly.
//
// Revision 1.50 2004/10/27 18:51:36 igorm
// Fixed synchronization problem in real hardware when 0xf is used for TSEG1.
//
915,7 → 920,7
begin
if (rst)
rx_eof <= 1'b0;
else if (go_rx_inter | go_error_frame | go_overload_frame)
else if (reset_mode | go_rx_inter | go_error_frame | go_overload_frame)
rx_eof <=#Tp 1'b0;
else if (go_rx_eof)
rx_eof <=#Tp 1'b1;
940,6 → 945,8
begin
if (rst)
id <= 29'h0;
else if (reset_mode)
id <= 29'h0;
else if (sample_point & (rx_id1 | rx_id2) & (~bit_de_stuff))
id <=#Tp {id[27:0], sampled_bit};
end
950,6 → 957,8
begin
if (rst)
rtr1 <= 1'b0;
else if (reset_mode)
rtr1 <= 1'b0;
else if (sample_point & rx_rtr1 & (~bit_de_stuff))
rtr1 <=#Tp sampled_bit;
end
960,6 → 969,8
begin
if (rst)
rtr2 <= 1'b0;
else if (reset_mode)
rtr2 <= 1'b0;
else if (sample_point & rx_rtr2 & (~bit_de_stuff))
rtr2 <=#Tp sampled_bit;
end
970,6 → 981,8
begin
if (rst)
ide <= 1'b0;
else if (reset_mode)
ide <= 1'b0;
else if (sample_point & rx_ide & (~bit_de_stuff))
ide <=#Tp sampled_bit;
end
980,6 → 993,8
begin
if (rst)
data_len <= 4'b0;
else if (reset_mode)
data_len <= 4'b0;
else if (sample_point & rx_dlc & (~bit_de_stuff))
data_len <=#Tp {data_len[2:0], sampled_bit};
end
990,6 → 1005,8
begin
if (rst)
tmp_data <= 8'h0;
else if (reset_mode)
tmp_data <= 8'h0;
else if (sample_point & rx_data & (~bit_de_stuff))
tmp_data <=#Tp {tmp_data[6:0], sampled_bit};
end
999,6 → 1016,8
begin
if (rst)
write_data_to_tmp_fifo <= 1'b0;
else if (reset_mode)
write_data_to_tmp_fifo <= 1'b0;
else if (sample_point & rx_data & (~bit_de_stuff) & (&bit_cnt[2:0]))
write_data_to_tmp_fifo <=#Tp 1'b1;
else
1010,9 → 1029,11
begin
if (rst)
byte_cnt <= 3'h0;
else if (reset_mode)
byte_cnt <= 3'h0;
else if (write_data_to_tmp_fifo)
byte_cnt <=#Tp byte_cnt + 1'b1;
else if (reset_mode | (sample_point & go_rx_crc_lim))
else if (sample_point & go_rx_crc_lim)
byte_cnt <=#Tp 3'h0;
end
 
1030,6 → 1051,8
begin
if (rst)
crc_in <= 15'h0;
else if (reset_mode)
crc_in <= 15'h0;
else if (sample_point & rx_crc & (~bit_de_stuff))
crc_in <=#Tp {crc_in[13:0], sampled_bit};
end
1040,6 → 1063,8
begin
if (rst)
bit_cnt <= 6'd0;
else if (reset_mode)
bit_cnt <= 6'd0;
else if (go_rx_id1 | go_rx_id2 | go_rx_dlc | go_rx_data | go_rx_crc |
go_rx_ack | go_rx_eof | go_rx_inter | go_error_frame | go_overload_frame)
bit_cnt <=#Tp 6'd0;
1053,9 → 1078,11
begin
if (rst)
eof_cnt <= 3'd0;
else if (reset_mode)
eof_cnt <= 3'd0;
else if (sample_point)
begin
if (reset_mode | go_rx_inter | go_error_frame | go_overload_frame)
if (go_rx_inter | go_error_frame | go_overload_frame)
eof_cnt <=#Tp 3'd0;
else if (rx_eof)
eof_cnt <=#Tp eof_cnt + 1'b1;
1068,6 → 1095,8
begin
if (rst)
bit_stuff_cnt_en <= 1'b0;
else if (reset_mode)
bit_stuff_cnt_en <= 1'b0;
else if (bit_de_stuff_set)
bit_stuff_cnt_en <=#Tp 1'b1;
else if (bit_de_stuff_reset)
1080,6 → 1109,8
begin
if (rst)
bit_stuff_cnt <= 3'h1;
else if (reset_mode)
bit_stuff_cnt <= 3'h1;
else if (bit_de_stuff_reset)
bit_stuff_cnt <=#Tp 3'h1;
else if (sample_point & bit_stuff_cnt_en)
1099,6 → 1130,8
begin
if (rst)
bit_stuff_cnt_tx <= 3'h1;
else if (reset_mode)
bit_stuff_cnt_tx <= 3'h1;
else if (bit_de_stuff_reset)
bit_stuff_cnt_tx <=#Tp 3'h1;
else if (tx_point_q & bit_stuff_cnt_en)
1144,10 → 1177,10
begin
if (rst)
crc_enable <= 1'b0;
else if (reset_mode | rst_crc_enable)
crc_enable <=#Tp 1'b0;
else if (go_crc_enable)
crc_enable <=#Tp 1'b1;
else if (reset_mode | rst_crc_enable)
crc_enable <=#Tp 1'b0;
end
 
 
1156,10 → 1189,10
begin
if (rst)
crc_err <= 1'b0;
else if (reset_mode | error_frame_ended)
crc_err <=#Tp 1'b0;
else if (go_rx_ack)
crc_err <=#Tp crc_in != calculated_crc;
else if (reset_mode | error_frame_ended)
crc_err <=#Tp 1'b0;
end
 
 
1641,6 → 1674,8
begin
if (rst)
tx_q <=#Tp 1'b0;
else if (reset_mode)
tx_q <=#Tp 1'b0;
else if (tx_point)
tx_q <=#Tp tx & (~go_early_tx_latched);
end
1651,6 → 1686,8
begin
if (rst)
tx_point_q <=#Tp 1'b0;
else if (reset_mode)
tx_point_q <=#Tp 1'b0;
else
tx_point_q <=#Tp tx_point;
end
1768,7 → 1805,7
begin
if (rst)
go_early_tx_latched <= 1'b0;
else if (tx_point)
else if (reset_mode || tx_point)
go_early_tx_latched <=#Tp 1'b0;
else if (go_early_tx)
go_early_tx_latched <=#Tp 1'b1;
1791,6 → 1828,8
begin
if (rst)
tx_state_q <=#Tp 1'b0;
else if (reset_mode)
tx_state_q <=#Tp 1'b0;
else
tx_state_q <=#Tp tx_state;
end
1885,6 → 1924,11
arbitration_lost_q <=#Tp 1'b0;
read_arbitration_lost_capture_reg_q <=#Tp 1'b0;
end
else if (reset_mode)
begin
arbitration_lost_q <=#Tp 1'b0;
read_arbitration_lost_capture_reg_q <=#Tp 1'b0;
end
else
begin
arbitration_lost_q <=#Tp arbitration_lost;
1900,7 → 1944,7
begin
if (rst)
arbitration_cnt_en <= 1'b0;
else if (arbitration_blocked)
else if (reset_mode || arbitration_blocked)
arbitration_cnt_en <=#Tp 1'b0;
else if (rx_id1 & sample_point & (~arbitration_blocked))
arbitration_cnt_en <=#Tp 1'b1;
1912,7 → 1956,7
begin
if (rst)
arbitration_blocked <= 1'b0;
else if (read_arbitration_lost_capture_reg)
else if (reset_mode || read_arbitration_lost_capture_reg)
arbitration_blocked <=#Tp 1'b0;
else if (set_arbitration_lost_irq)
arbitration_blocked <=#Tp 1'b1;
2048,6 → 2092,8
begin
if (rst)
bus_free <= 1'b0;
else if (reset_mode)
bus_free <= 1'b0;
else if (sample_point & sampled_bit & (bus_free_cnt==4'd10))
bus_free <=#Tp 1'b1;
else
2059,6 → 2105,8
begin
if (rst)
waiting_for_bus_free <= 1'b1;
else if (reset_mode)
waiting_for_bus_free <= 1'b1;
else if (bus_free & (~node_bus_off))
waiting_for_bus_free <=#Tp 1'b0;
else if ((~reset_mode) & reset_mode_q | node_bus_off_q & (~reset_mode))
2069,13 → 2117,13
assign bus_off_on = ~node_bus_off;
 
assign set_reset_mode = node_bus_off & (~node_bus_off_q);
assign error_status = (~reset_mode) & extended_mode? ((rx_err_cnt >= error_warning_limit) | (tx_err_cnt >= error_warning_limit)) :
((rx_err_cnt >= 9'd96) | (tx_err_cnt >= 9'd96)) ;
assign error_status = extended_mode? ((rx_err_cnt >= error_warning_limit) | (tx_err_cnt >= error_warning_limit)) :
((rx_err_cnt >= 9'd96) | (tx_err_cnt >= 9'd96)) ;
 
assign transmit_status = transmitting | (extended_mode & waiting_for_bus_free);
assign receive_status = (~rx_idle) & (~transmitting) | (extended_mode & waiting_for_bus_free);
assign transmit_status = transmitting || (extended_mode && waiting_for_bus_free);
assign receive_status = extended_mode ? (waiting_for_bus_free || (!rx_idle) && (!transmitting)) :
((!waiting_for_bus_free) && (!rx_idle) && (!transmitting));
 
 
/* Error code capture register */
always @ (posedge clk or posedge rst)
begin
/trunk/rtl/verilog/can_registers.v
50,6 → 50,10
// CVS Revision History
//
// $Log: not supported by cvs2svn $
// Revision 1.33 2004/10/25 11:44:38 igorm
// Interrupt is always cleared for one clock after the irq register is read.
// This fixes problems when CPU is using IRQs that are edge triggered.
//
// Revision 1.32 2004/05/12 15:58:41 igorm
// Core improved to pass all tests with the Bosch VHDL Reference system.
//
542,7 → 546,7
.we(we_command),
.clk(clk),
.rst(rst),
.rst_sync(command[0] & sample_point)
.rst_sync(command[0] & sample_point | reset_mode)
);
 
can_register_asyn_syn #(1, 1'h0) COMMAND_REG1
551,7 → 555,7
.we(we_command),
.clk(clk),
.rst(rst),
.rst_sync(sample_point & (tx_request | (abort_tx & ~transmitting)))
.rst_sync(sample_point & (tx_request | (abort_tx & ~transmitting)) | reset_mode)
);
 
can_register_asyn_syn #(2, 2'h0) COMMAND_REG
560,7 → 564,7
.we(we_command),
.clk(clk),
.rst(rst),
.rst_sync(|command[3:2])
.rst_sync(|command[3:2] | reset_mode)
);
 
can_register_asyn_syn #(1, 1'h0) COMMAND_REG4
569,7 → 573,7
.we(we_command),
.clk(clk),
.rst(rst),
.rst_sync(command[4] & sample_point)
.rst_sync(command[4] & sample_point | reset_mode)
);
 
 
662,7 → 666,7
transmit_buffer_status <= 1'b1;
else if (tx_request)
transmit_buffer_status <=#Tp 1'b0;
else if (~need_to_tx)
else if (reset_mode || !need_to_tx)
transmit_buffer_status <=#Tp 1'b1;
end
 
673,7 → 677,7
overrun_status <= 1'b0;
else if (overrun & (~overrun_q))
overrun_status <=#Tp 1'b1;
else if (clear_data_overrun)
else if (reset_mode || clear_data_overrun)
overrun_status <=#Tp 1'b0;
end
 
682,7 → 686,7
begin
if (rst)
receive_buffer_status <= 1'b0;
else if (release_buffer)
else if (reset_mode || release_buffer)
receive_buffer_status <=#Tp 1'b0;
else if (~info_empty)
receive_buffer_status <=#Tp 1'b1;
1145,7 → 1149,7
data_overrun_irq <= 1'b0;
else if (overrun & (~overrun_q) & data_overrun_irq_en)
data_overrun_irq <=#Tp 1'b1;
else if (read_irq_reg)
else if (reset_mode || read_irq_reg)
data_overrun_irq <=#Tp 1'b0;
end
 
1155,10 → 1159,10
begin
if (rst)
transmit_irq <= 1'b0;
else if (reset_mode || read_irq_reg)
transmit_irq <=#Tp 1'b0;
else if (transmit_buffer_status & (~transmit_buffer_status_q) & transmit_irq_en)
transmit_irq <=#Tp 1'b1;
else if (read_irq_reg)
transmit_irq <=#Tp 1'b0;
end
 
 
1167,10 → 1171,10
begin
if (rst)
receive_irq <= 1'b0;
else if (release_buffer)
receive_irq <=#Tp 1'b0;
else if ((~info_empty) & (~receive_irq) & receive_irq_en)
receive_irq <=#Tp 1'b1;
else if (reset_mode || release_buffer)
receive_irq <=#Tp 1'b0;
end
 
 
1193,7 → 1197,7
bus_error_irq <= 1'b0;
else if (set_bus_error_irq & bus_error_irq_en)
bus_error_irq <=#Tp 1'b1;
else if (read_irq_reg)
else if (reset_mode || read_irq_reg)
bus_error_irq <=#Tp 1'b0;
end
 
1205,7 → 1209,7
arbitration_lost_irq <= 1'b0;
else if (set_arbitration_lost_irq & arbitration_lost_irq_en)
arbitration_lost_irq <=#Tp 1'b1;
else if (read_irq_reg)
else if (reset_mode || read_irq_reg)
arbitration_lost_irq <=#Tp 1'b0;
end
 
1218,7 → 1222,7
error_passive_irq <= 1'b0;
else if ((node_error_passive & (~node_error_passive_q) | (~node_error_passive) & node_error_passive_q & node_error_active) & error_passive_irq_en)
error_passive_irq <=#Tp 1'b1;
else if (read_irq_reg)
else if (reset_mode || read_irq_reg)
error_passive_irq <=#Tp 1'b0;
end
 
1242,3 → 1246,4
 
 
endmodule
 

powered by: WebSVN 2.1.0

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