亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? can_registers.v

?? FPGA數字電子系統設計與開發實例導航(源程序)
?? V
?? 第 1 頁 / 共 2 頁
字號:
/* Bus Timing 1 register */
wire   [7:0] bus_timing_1;
can_register #(8) BUS_TIMING_1_REG
( .data_in(data_in),
  .data_out(bus_timing_1),
  .we(we_bus_timing_1),
  .clk(clk)
);

assign time_segment1 = bus_timing_1[3:0];
assign time_segment2 = bus_timing_1[6:4];
assign triple_sampling = bus_timing_1[7];
/* End Bus Timing 1 register */


/* Error Warning Limit register */
can_register_asyn #(8, 96) ERROR_WARNING_REG
( .data_in(data_in),
  .data_out(error_warning_limit),
  .we(we_error_warning_limit),
  .clk(clk),
  .rst(rst)
);
/* End Error Warning Limit register */



/* Clock Divider register */
wire   [7:0] clock_divider;
wire         clock_off;
wire   [2:0] cd;
reg    [2:0] clkout_div;
reg    [2:0] clkout_cnt;
reg          clkout_tmp;
//reg          clkout;

can_register #(1) CLOCK_DIVIDER_REG_7
( .data_in(data_in[7]),
  .data_out(clock_divider[7]),
  .we(we_clock_divider_hi),
  .clk(clk)
);

assign clock_divider[6:4] = 3'h0;

can_register #(1) CLOCK_DIVIDER_REG_3
( .data_in(data_in[3]),
  .data_out(clock_divider[3]),
  .we(we_clock_divider_hi),
  .clk(clk)
);

can_register #(3) CLOCK_DIVIDER_REG_LOW
( .data_in(data_in[2:0]),
  .data_out(clock_divider[2:0]),
  .we(we_clock_divider_low),
  .clk(clk)
);

assign extended_mode = clock_divider[7];
assign clock_off     = clock_divider[3];
assign cd[2:0]       = clock_divider[2:0];



always @ (cd)
begin
  case (cd)                       // synopsys_full_case synopsys_paralel_case
    3'b000 : clkout_div <= 0;
    3'b001 : clkout_div <= 1;
    3'b010 : clkout_div <= 2;
    3'b011 : clkout_div <= 3;
    3'b100 : clkout_div <= 4;
    3'b101 : clkout_div <= 5;
    3'b110 : clkout_div <= 6;
    3'b111 : clkout_div <= 0;
  endcase
end



always @ (posedge clk or posedge rst)
begin
  if (rst)
    clkout_cnt <= 3'h0;
  else if (clkout_cnt == clkout_div)
    clkout_cnt <=#Tp 3'h0;
  else
    clkout_cnt <= clkout_cnt + 1'b1;
end



always @ (posedge clk or posedge rst)
begin
  if (rst)
    clkout_tmp <= 1'b0;
  else if (clkout_cnt == clkout_div)
    clkout_tmp <=#Tp ~clkout_tmp;
end


/*
//always @ (cd or clk or clkout_tmp or clock_off)
always @ (cd or clkout_tmp or clock_off)
begin
  if (clock_off)
    clkout <=#Tp 1'b1;
//  else if (&cd)
//    clkout <=#Tp clk;
  else
    clkout <=#Tp clkout_tmp;
end
*/
assign 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 registers
always @ ( addr or read 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
  if(read)  // read
    begin
      if (extended_mode)    // EXTENDED mode (Different register map depends on mode)
        begin
          case(addr)
            8'd0  :  data_out_tmp <= {4'b0000, mode_ext[3:1], mode[0]};
            8'd1  :  data_out_tmp <= 8'h0;
            8'd2  :  data_out_tmp <= status;
            8'd3  :  data_out_tmp <= irq_reg;
            8'd4  :  data_out_tmp <= irq_en_ext;
            8'd6  :  data_out_tmp <= bus_timing_0;
            8'd7  :  data_out_tmp <= bus_timing_1;
            8'd11 :  data_out_tmp <= {3'h0, arbitration_lost_capture[4:0]};
            8'd12 :  data_out_tmp <= error_capture_code;
            8'd13 :  data_out_tmp <= error_warning_limit;
            8'd14 :  data_out_tmp <= rx_err_cnt;
            8'd15 :  data_out_tmp <= tx_err_cnt;
            8'd16 :  data_out_tmp <= acceptance_code_0;
            8'd17 :  data_out_tmp <= acceptance_code_1;
            8'd18 :  data_out_tmp <= acceptance_code_2;
            8'd19 :  data_out_tmp <= acceptance_code_3;
            8'd20 :  data_out_tmp <= acceptance_mask_0;
            8'd21 :  data_out_tmp <= acceptance_mask_1;
            8'd22 :  data_out_tmp <= acceptance_mask_2;
            8'd23 :  data_out_tmp <= acceptance_mask_3;
            8'd24 :  data_out_tmp <= 8'h0;
            8'd25 :  data_out_tmp <= 8'h0;
            8'd26 :  data_out_tmp <= 8'h0;
            8'd27 :  data_out_tmp <= 8'h0;
            8'd28 :  data_out_tmp <= 8'h0;
            8'd29 :  data_out_tmp <= {1'b0, rx_message_counter};
            8'd31 :  data_out_tmp <= clock_divider;
    
            default: data_out_tmp <= 8'h0;
          endcase
        end
      else                  // BASIC mode
        begin
          case(addr)
            8'd0  :  data_out_tmp <= {3'b001, mode_basic[4:1], mode[0]};
            8'd1  :  data_out_tmp <= 8'hff;
            8'd2  :  data_out_tmp <= status;
            8'd3  :  data_out_tmp <= {4'hf, irq_reg[3:0]};
            8'd4  :  data_out_tmp <= reset_mode? acceptance_code_0 : 8'hff;
            8'd5  :  data_out_tmp <= reset_mode? acceptance_mask_0 : 8'hff;
            8'd6  :  data_out_tmp <= reset_mode? bus_timing_0 : 8'hff;
            8'd7  :  data_out_tmp <= reset_mode? bus_timing_1 : 8'hff;
            8'd10 :  data_out_tmp <= reset_mode? 8'hff : tx_data_0;
            8'd11 :  data_out_tmp <= reset_mode? 8'hff : tx_data_1;
            8'd12 :  data_out_tmp <= reset_mode? 8'hff : tx_data_2;
            8'd13 :  data_out_tmp <= reset_mode? 8'hff : tx_data_3;
            8'd14 :  data_out_tmp <= reset_mode? 8'hff : tx_data_4;
            8'd15 :  data_out_tmp <= reset_mode? 8'hff : tx_data_5;
            8'd16 :  data_out_tmp <= reset_mode? 8'hff : tx_data_6;
            8'd17 :  data_out_tmp <= reset_mode? 8'hff : tx_data_7;
            8'd18 :  data_out_tmp <= reset_mode? 8'hff : tx_data_8;
            8'd19 :  data_out_tmp <= reset_mode? 8'hff : tx_data_9;
            8'd31 :  data_out_tmp <= clock_divider;
    
            default: data_out_tmp <= 8'h0;
          endcase
        end
    end
  else
    data_out_tmp <= 8'h0;
end


always @ (posedge clk or posedge rst)
begin
  if (rst)
    data_out <= 0;
  else if (read)
    data_out <=#Tp data_out_tmp;
end

// 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 (read_irq_reg)
    data_overrun_irq <=#Tp 1'b0;
end


reg transmit_irq;
always @ (posedge clk or posedge rst)
begin
  if (rst)
    transmit_irq <= 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


reg receive_irq;
always @ (posedge clk or posedge rst)
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;
end


reg 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;
end


reg 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 (read_irq_reg)
    bus_error_irq <=#Tp 1'b0;
end


reg 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 (read_irq_reg)
    arbitration_lost_irq <=#Tp 1'b0;
end



reg 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 (read_irq_reg)
    error_passive_irq <=#Tp 1'b0;
end



assign 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;





endmodule

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97se亚洲国产综合自在线| 欧美精品v国产精品v日韩精品| av亚洲产国偷v产偷v自拍| 欧美视频一区在线| 国产精品国产三级国产| 免费av网站大全久久| 91片在线免费观看| 久久久久久一二三区| 丝袜亚洲另类丝袜在线| 99精品视频一区二区| www国产精品av| 欧美bbbbb| 欧美男人的天堂一二区| 亚洲欧美激情在线| 成人综合婷婷国产精品久久| 91精品啪在线观看国产60岁| 一区二区成人在线视频| 成人黄色免费短视频| 久久精品一区二区三区四区| 免费成人在线观看视频| 欧美日韩大陆一区二区| 伊人色综合久久天天| 92精品国产成人观看免费| 国产精品视频一二三区| 国产乱码精品一区二区三区忘忧草 | 99精品黄色片免费大全| 久久久久久久久99精品| 美女任你摸久久| 日韩欧美资源站| 免费久久精品视频| 欧美zozo另类异族| 韩日精品视频一区| 久久久久久久久久久电影| 国产一区二区不卡| 久久精品夜色噜噜亚洲a∨| 国产伦精品一区二区三区免费迷 | 精东粉嫩av免费一区二区三区| 欧美一级二级在线观看| 美脚の诱脚舐め脚责91| 精品国产成人在线影院| 国产麻豆精品在线观看| 国产精品久久久一本精品| 成人av资源网站| 一区二区成人在线| 91精品国产综合久久精品app| 青青草伊人久久| 久久综合色天天久久综合图片| 韩国av一区二区| 国产精品理论在线观看| 色婷婷精品久久二区二区蜜臀av| 又紧又大又爽精品一区二区| 欧美日韩国产综合视频在线观看 | 精品国产免费一区二区三区四区| 国产在线精品一区二区夜色| 国产拍欧美日韩视频二区| 91年精品国产| 天天综合色天天| 亚洲精品一区二区三区精华液| 粗大黑人巨茎大战欧美成人| 一区二区日韩av| 日韩精品在线一区二区| 国产suv精品一区二区883| 夜夜爽夜夜爽精品视频| 欧美第一区第二区| 97se亚洲国产综合自在线观| 男男视频亚洲欧美| 欧美性猛交xxxxxxxx| 国产一区二区精品久久91| 中文字幕亚洲不卡| 欧美一区二区啪啪| 99久久精品国产一区二区三区| 日韩激情视频在线观看| 亚洲国产精品t66y| 欧美精品色综合| www.成人网.com| 麻豆国产精品一区二区三区 | 欧美国产日韩在线观看| 欧美色窝79yyyycom| 国产精品夜夜嗨| 亚洲电影一级片| 国产日韩欧美精品一区| 欧美喷潮久久久xxxxx| 国产成人丝袜美腿| 日韩电影在线一区| 一区二区三区在线免费视频| 精品剧情在线观看| 欧美精品久久天天躁| 91在线国产福利| 国产一区亚洲一区| 日韩成人精品在线| 亚洲女性喷水在线观看一区| 日韩欧美国产一二三区| 欧美色视频一区| 91免费看视频| 成人午夜在线播放| 国产精品中文字幕一区二区三区| 天堂一区二区在线免费观看| 亚洲免费高清视频在线| 国产精品进线69影院| 久久久久久麻豆| 久久亚洲精精品中文字幕早川悠里 | 美国十次了思思久久精品导航| 亚洲一区二区三区视频在线| 亚洲国产成人tv| 一区在线中文字幕| 国产精品久久久久一区| 国产日韩影视精品| 中文字幕欧美日韩一区| 久久精品在线免费观看| 国产亚洲一区字幕| 久久亚洲捆绑美女| 久久九九久精品国产免费直播| 26uuu亚洲综合色欧美| 日韩亚洲欧美综合| 日韩免费观看高清完整版在线观看| 欧美日韩精品一二三区| 欧美精品一卡两卡| 欧美大片一区二区三区| 91麻豆精品国产综合久久久久久| 欧美日韩和欧美的一区二区| 欧美精品在线视频| 精品日韩成人av| 久久嫩草精品久久久精品一| 久久精子c满五个校花| 日本一区二区三区视频视频| 国产精品无遮挡| 亚洲视频网在线直播| 亚洲影院理伦片| 日韩av高清在线观看| 国产在线一区观看| 丁香一区二区三区| 色综合中文字幕| 欧美日韩一区视频| 日韩午夜精品视频| 国产欧美日韩麻豆91| 首页欧美精品中文字幕| 老司机午夜精品| 成人影视亚洲图片在线| 欧美在线高清视频| 日韩区在线观看| 国产精品免费丝袜| 亚洲一区二区三区三| 久久国产麻豆精品| av亚洲精华国产精华| 欧美高清视频一二三区| 久久理论电影网| 亚洲在线免费播放| 理论电影国产精品| 色综合久久久久| 欧美一区二区三区精品| 亚洲国产精品精华液2区45| 亚洲电影一区二区三区| 国产一区二区三区黄视频 | 欧美久久一区二区| 久久久久国产精品麻豆| 亚洲高清视频在线| 国产一区二区三区电影在线观看| 色综合天天天天做夜夜夜夜做| 欧美一级生活片| 日韩理论片中文av| 国内外成人在线| 欧美日韩免费视频| 国产女同性恋一区二区| 亚洲成人av福利| 99视频精品全部免费在线| 91精品国产综合久久精品麻豆| 亚洲视频精选在线| 精品一区二区三区免费| 欧美性猛片xxxx免费看久爱| 久久久久国产成人精品亚洲午夜| 亚洲1区2区3区4区| av中文一区二区三区| 精品国产欧美一区二区| 亚洲成人午夜影院| 一本大道久久a久久精品综合| www国产精品av| 欧美aaa在线| 欧美日韩国产中文| 亚洲免费观看高清在线观看| 国产成人午夜电影网| 精品三级av在线| 琪琪一区二区三区| 在线观看一区二区视频| 日韩一区在线看| 北条麻妃一区二区三区| 国产欧美视频在线观看| 国产一区亚洲一区| 欧美精品一区二区三区四区| 日本特黄久久久高潮| 欧美色精品在线视频| 一级中文字幕一区二区| 91久久精品国产91性色tv| 国产精品高潮久久久久无| 国产精品亚洲成人| 国产亚洲综合性久久久影院| 精品亚洲成a人在线观看| 欧美电影免费观看完整版| 奇米精品一区二区三区在线观看| 欧美精品 日韩| 乱一区二区av|