⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 can_registers.v

📁 This source file may be used and distributed without restriction provided that this copyright statem
💻 V
📖 第 1 页 / 共 3 页
字号:
endalways @ (posedge clk or posedge rst)begin  if (rst)    clkout_tmp <= 1'b0;  else if (clkout_cnt == clkout_div)    clkout_tmp <=#Tp ~clkout_tmp;endassign clkout = clock_off ? 1'b1 : ((&cd)? clk : clkout_tmp);/* End Clock Divider register *//* This section is for BASIC and EXTENDED mode *//* Acceptance code register */can_register #(8) ACCEPTANCE_CODE_REG0( .data_in(data_in),  .data_out(acceptance_code_0),  .we(we_acceptance_code_0),  .clk(clk));/* End: Acceptance code register *//* Acceptance mask register */can_register #(8) ACCEPTANCE_MASK_REG0( .data_in(data_in),  .data_out(acceptance_mask_0),  .we(we_acceptance_mask_0),  .clk(clk));/* 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 */can_register #(8) ACCEPTANCE_CODE_REG1( .data_in(data_in),  .data_out(acceptance_code_1),  .we(we_acceptance_code_1),  .clk(clk));/* End: Acceptance code register *//* Acceptance code register 2 */can_register #(8) ACCEPTANCE_CODE_REG2( .data_in(data_in),  .data_out(acceptance_code_2),  .we(we_acceptance_code_2),  .clk(clk));/* End: Acceptance code register *//* Acceptance code register 3 */can_register #(8) ACCEPTANCE_CODE_REG3( .data_in(data_in),  .data_out(acceptance_code_3),  .we(we_acceptance_code_3),  .clk(clk));/* End: Acceptance code register *//* Acceptance mask register 1 */can_register #(8) ACCEPTANCE_MASK_REG1( .data_in(data_in),  .data_out(acceptance_mask_1),  .we(we_acceptance_mask_1),  .clk(clk));/* End: Acceptance code register *//* Acceptance mask register 2 */can_register #(8) ACCEPTANCE_MASK_REG2( .data_in(data_in),  .data_out(acceptance_mask_2),  .we(we_acceptance_mask_2),  .clk(clk));/* End: Acceptance code register *//* Acceptance mask register 3 */can_register #(8) ACCEPTANCE_MASK_REG3( .data_in(data_in),  .data_out(acceptance_mask_3),  .we(we_acceptance_mask_3),  .clk(clk));/* End: Acceptance code register *//* End: This section is for EXTENDED mode */// Reading data from registersalways @ ( addr or extended_mode or mode or bus_timing_0 or bus_timing_1 or clock_divider or           acceptance_code_0 or acceptance_code_1 or acceptance_code_2 or acceptance_code_3 or           acceptance_mask_0 or acceptance_mask_1 or acceptance_mask_2 or acceptance_mask_3 or           reset_mode or tx_data_0 or tx_data_1 or tx_data_2 or tx_data_3 or tx_data_4 or            tx_data_5 or tx_data_6 or tx_data_7 or tx_data_8 or tx_data_9 or status or            error_warning_limit or rx_err_cnt or tx_err_cnt or irq_en_ext or irq_reg or mode_ext or           arbitration_lost_capture or rx_message_counter or mode_basic or error_capture_code         )begin  case({extended_mode, addr[4:0]})  /* synthesis parallel_case */     {1'h1, 5'd00} :  data_out = {4'b0000, mode_ext[3:1], mode[0]};      // extended mode    {1'h1, 5'd01} :  data_out = 8'h0;                                   // extended mode    {1'h1, 5'd02} :  data_out = status;                                 // extended mode    {1'h1, 5'd03} :  data_out = irq_reg;                                // extended mode    {1'h1, 5'd04} :  data_out = irq_en_ext;                             // extended mode    {1'h1, 5'd06} :  data_out = bus_timing_0;                           // extended mode    {1'h1, 5'd07} :  data_out = bus_timing_1;                           // extended mode    {1'h1, 5'd11} :  data_out = {3'h0, arbitration_lost_capture[4:0]};  // extended mode    {1'h1, 5'd12} :  data_out = error_capture_code;                     // extended mode    {1'h1, 5'd13} :  data_out = error_warning_limit;                    // extended mode    {1'h1, 5'd14} :  data_out = rx_err_cnt;                             // extended mode    {1'h1, 5'd15} :  data_out = tx_err_cnt;                             // extended mode    {1'h1, 5'd16} :  data_out = acceptance_code_0;                      // extended mode    {1'h1, 5'd17} :  data_out = acceptance_code_1;                      // extended mode    {1'h1, 5'd18} :  data_out = acceptance_code_2;                      // extended mode    {1'h1, 5'd19} :  data_out = acceptance_code_3;                      // extended mode    {1'h1, 5'd20} :  data_out = acceptance_mask_0;                      // extended mode    {1'h1, 5'd21} :  data_out = acceptance_mask_1;                      // extended mode    {1'h1, 5'd22} :  data_out = acceptance_mask_2;                      // extended mode    {1'h1, 5'd23} :  data_out = acceptance_mask_3;                      // extended mode    {1'h1, 5'd24} :  data_out = 8'h0;                                   // extended mode    {1'h1, 5'd25} :  data_out = 8'h0;                                   // extended mode    {1'h1, 5'd26} :  data_out = 8'h0;                                   // extended mode    {1'h1, 5'd27} :  data_out = 8'h0;                                   // extended mode    {1'h1, 5'd28} :  data_out = 8'h0;                                   // extended mode    {1'h1, 5'd29} :  data_out = {1'b0, rx_message_counter};             // extended mode    {1'h1, 5'd31} :  data_out = clock_divider;                          // extended mode    {1'h0, 5'd00} :  data_out = {3'b001, mode_basic[4:1], mode[0]};     // basic mode    {1'h0, 5'd01} :  data_out = 8'hff;                                  // basic mode    {1'h0, 5'd02} :  data_out = status;                                 // basic mode    {1'h0, 5'd03} :  data_out = {4'he, irq_reg[3:0]};                   // basic mode    {1'h0, 5'd04} :  data_out = reset_mode? acceptance_code_0 : 8'hff;  // basic mode    {1'h0, 5'd05} :  data_out = reset_mode? acceptance_mask_0 : 8'hff;  // basic mode    {1'h0, 5'd06} :  data_out = reset_mode? bus_timing_0 : 8'hff;       // basic mode    {1'h0, 5'd07} :  data_out = reset_mode? bus_timing_1 : 8'hff;       // basic mode    {1'h0, 5'd10} :  data_out = reset_mode? 8'hff : tx_data_0;          // basic mode    {1'h0, 5'd11} :  data_out = reset_mode? 8'hff : tx_data_1;          // basic mode    {1'h0, 5'd12} :  data_out = reset_mode? 8'hff : tx_data_2;          // basic mode    {1'h0, 5'd13} :  data_out = reset_mode? 8'hff : tx_data_3;          // basic mode    {1'h0, 5'd14} :  data_out = reset_mode? 8'hff : tx_data_4;          // basic mode    {1'h0, 5'd15} :  data_out = reset_mode? 8'hff : tx_data_5;          // basic mode    {1'h0, 5'd16} :  data_out = reset_mode? 8'hff : tx_data_6;          // basic mode    {1'h0, 5'd17} :  data_out = reset_mode? 8'hff : tx_data_7;          // basic mode    {1'h0, 5'd18} :  data_out = reset_mode? 8'hff : tx_data_8;          // basic mode    {1'h0, 5'd19} :  data_out = reset_mode? 8'hff : tx_data_9;          // basic mode    {1'h0, 5'd31} :  data_out = clock_divider;                          // basic mode    default :  data_out = 8'h0;                                   // the rest is read as 0  endcaseend// Some interrupts exist in basic mode and in extended mode. Since they are in different registers they need to be multiplexed.assign data_overrun_irq_en  = extended_mode ? data_overrun_irq_en_ext  : overrun_irq_en_basic;assign error_warning_irq_en = extended_mode ? error_warning_irq_en_ext : error_irq_en_basic;assign transmit_irq_en      = extended_mode ? transmit_irq_en_ext      : transmit_irq_en_basic;assign receive_irq_en       = extended_mode ? receive_irq_en_ext       : receive_irq_en_basic;reg data_overrun_irq;always @ (posedge clk or posedge rst)begin  if (rst)    data_overrun_irq <= 1'b0;  else if (overrun & (~overrun_q) & data_overrun_irq_en)    data_overrun_irq <=#Tp 1'b1;  else if (reset_mode || read_irq_reg)    data_overrun_irq <=#Tp 1'b0;endreg transmit_irq;always @ (posedge clk or posedge rst)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;endreg receive_irq;always @ (posedge clk or posedge rst)begin  if (rst)    receive_irq <= 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;endreg error_irq;always @ (posedge clk or posedge rst)begin  if (rst)    error_irq <= 1'b0;  else if (((error_status ^ error_status_q) | (node_bus_off ^ node_bus_off_q)) & error_warning_irq_en)    error_irq <=#Tp 1'b1;  else if (read_irq_reg)    error_irq <=#Tp 1'b0;endreg bus_error_irq;always @ (posedge clk or posedge rst)begin  if (rst)    bus_error_irq <= 1'b0;  else if (set_bus_error_irq & bus_error_irq_en)    bus_error_irq <=#Tp 1'b1;  else if (reset_mode || read_irq_reg)    bus_error_irq <=#Tp 1'b0;endreg arbitration_lost_irq;always @ (posedge clk or posedge rst)begin  if (rst)    arbitration_lost_irq <= 1'b0;  else if (set_arbitration_lost_irq & arbitration_lost_irq_en)    arbitration_lost_irq <=#Tp 1'b1;  else if (reset_mode || read_irq_reg)    arbitration_lost_irq <=#Tp 1'b0;endreg error_passive_irq;always @ (posedge clk or posedge rst)begin  if (rst)    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 (reset_mode || read_irq_reg)    error_passive_irq <=#Tp 1'b0;endassign irq_reg = {bus_error_irq, arbitration_lost_irq, error_passive_irq, 1'b0, data_overrun_irq, error_irq, transmit_irq, receive_irq};assign irq = data_overrun_irq | transmit_irq | receive_irq | error_irq | bus_error_irq | arbitration_lost_irq | error_passive_irq;always @ (posedge clk or posedge rst)begin  if (rst)    irq_n <= 1'b1;  else if (read_irq_reg || release_buffer)    irq_n <=#Tp 1'b1;  else if (irq)    irq_n <=#Tp 1'b0;endendmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -