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

📄 pci_target32_sm.v

📁 这是用pci-wishbone核和16450串口核在xilinx的fpga上实现的串口程序
💻 V
📖 第 1 页 / 共 3 页
字号:
        sm_transfere <= 1'b0 ;        state_default   <= 1'b0 ;        n_state <= S_TRANSFERE ;    end    S_TRANSFERE :    begin        state_idle      <= 1'b0 ;        state_wait      <= 1'b0 ;        sm_transfere <= 1'b1 ;        state_default   <= 1'b0 ;        n_state <= S_IDLE ;    end    default :    begin        state_idle      <= 1'b0 ;        state_wait      <= 1'b0 ;        sm_transfere <= 1'b0 ;        state_default   <= 1'b1 ;        n_state <= S_IDLE ;    end    endcaseend        // if not retry and not target abort        // NO CRITICAL SIGNALSwire    trdy_w          =   (        (state_wait && ~cnf_progress && rw_cbe0 && wr_progress && ~target_abort_in) ||        (state_wait && ~cnf_progress && ~rw_cbe0 && same_read_reg && rd_progress && ~target_abort_in && !pcir_fifo_data_err_in) ||        (state_wait && ~cnf_progress && ~rw_cbe0 && ~same_read_reg && norm_access_to_conf_reg && ~target_abort_in) ||        (state_wait && cnf_progress && ~target_abort_in)                            ) ;        // if not disconnect without data and not target abort (only during reads)        // MUST BE ANDED WITH CRITICAL ~FRAMEwire    trdy_w_frm      =   (        (state_transfere && !cnf_progress && !norm_access_to_conf_reg && rw_cbe0 && !disconect_wo_data) ||        (state_transfere && !cnf_progress && !norm_access_to_conf_reg && ~rw_cbe0 && !disconect_wo_data && ~pcir_fifo_data_err_in) ||        (state_transfere && !cnf_progress && !norm_access_to_conf_reg && disconect_w_data && pci_irdy_reg_in &&                                                                          ((~rw_cbe0 && ~pcir_fifo_data_err_in) || rw_cbe0))                            ) ;        // if not disconnect without data and not target abort (only during reads)        // MUST BE ANDED WITH CRITICAL ~FRAME AND IRDYwire    trdy_w_frm_irdy =   ( ~bckp_trdy_in ) ;// TRDY critical module used for preserving the architecture because of minimum delay for critical inputspci_target32_trdy_crit pci_target_trdy_critical(    .trdy_w                 (trdy_w),    .trdy_w_frm             (trdy_w_frm),    .trdy_w_frm_irdy        (trdy_w_frm_irdy),    .pci_frame_in           (pci_frame_in),    .pci_irdy_in            (pci_irdy_in),    .pci_trdy_out           (pci_trdy_out));        // if target abort or retry        // NO CRITICAL SIGNALSwire    stop_w          =   (        (state_wait && target_abort_in) ||        (state_wait && ~cnf_progress && rw_cbe0 && ~wr_progress) ||        (state_wait && ~cnf_progress && ~rw_cbe0 && same_read_reg && ~rd_progress) ||        (state_wait && ~cnf_progress && ~rw_cbe0 && same_read_reg && rd_progress && pcir_fifo_data_err_in) ||        (state_wait && ~cnf_progress && ~rw_cbe0 && ~same_read_reg && ~norm_access_to_conf_reg)                            ) ;        // if asserted, wait for deactivating the frame        // MUST BE ANDED WITH CRITICAL ~FRAMEwire    stop_w_frm      =   (        (state_backoff && ~bckp_stop_in)                            ) ;        // if target abort or if disconnect without data (after data transfere)        // MUST BE ANDED WITH CRITICAL ~FRAME AND ~IRDYwire    stop_w_frm_irdy =   (        (state_transfere && (disconect_wo_data)) ||        (state_transfere && ~rw_cbe0 && pcir_fifo_data_err_in)                            ) ;// STOP critical module used for preserving the architecture because of minimum delay for critical inputspci_target32_stop_crit pci_target_stop_critical(    .stop_w                 (stop_w),    .stop_w_frm             (stop_w_frm),    .stop_w_frm_irdy        (stop_w_frm_irdy),    .pci_frame_in           (pci_frame_in),    .pci_irdy_in            (pci_irdy_in),    .pci_stop_out           (pci_stop_out));        // if OK to respond and not target abort        // NO CRITICAL SIGNALSwire    devs_w          =   (        (addr_phase && config_access) ||        (addr_phase && ~config_access && addr_claim_in) ||        (state_wait && ~target_abort_in && !(~cnf_progress && ~rw_cbe0 && same_read_reg && rd_progress && pcir_fifo_data_err_in) )                            ) ;        // if not target abort (only during reads) or if asserted, wait for deactivating the frame        // MUST BE ANDED WITH CRITICAL ~FRAMEwire    devs_w_frm      =   (        (state_transfere && rw_cbe0) ||        (state_transfere && ~rw_cbe0 && ~pcir_fifo_data_err_in) ||        (state_backoff && ~bckp_devsel_in)                            ) ;        // if not target abort (only during reads)        // MUST BE ANDED WITH CRITICAL ~FRAME AND IRDYwire    devs_w_frm_irdy =   (        (state_transfere && ~rw_cbe0 && pcir_fifo_data_err_in)                            ) ;// DEVSEL critical module used for preserving the architecture because of minimum delay for critical inputspci_target32_devs_crit pci_target_devsel_critical(    .devs_w                 (devs_w),    .devs_w_frm             (devs_w_frm),    .devs_w_frm_irdy        (devs_w_frm_irdy),    .pci_frame_in           (pci_frame_in),    .pci_irdy_in            (pci_irdy_in),    .pci_devsel_out         (pci_devsel_out));// signal used in AD enable module with preserving the hierarchy because of minimum delay for critical inputsassign	pci_ad_en_out =    (        (addr_phase && config_access && ~pci_cbe_reg_in[0]) ||        (addr_phase && ~config_access && addr_claim_in && ~pci_cbe_reg_in[0]) ||        (state_wait && ~rw_cbe0) ||         (state_transfere && ~rw_cbe0) ||        (state_backoff && ~rw_cbe0 && ~pci_frame_reg_in)                            ) ;wire fast_back_to_back  =   (addr_phase && ~pci_irdy_reg_in) ;        // if cycle will progress or will not be stopped        // NO CRITICAL SIGNALSwire    ctrl_en       =        /*(~wbu_frame_en_in && fast_back_to_back) ||*/        (addr_phase && config_access) ||        (addr_phase && ~config_access && addr_claim_in) ||        (state_wait) ||        (state_transfere && ~(pci_frame_reg_in && ~pci_irdy_reg_in && (~pci_stop_reg_in || ~pci_trdy_reg_in))) ||        (state_backoff && ~(pci_frame_reg_in && ~pci_irdy_reg_in && (~pci_stop_reg_in || ~pci_trdy_reg_in))) ;assign pci_trdy_en_out   = ctrl_en ;assign pci_stop_en_out   = ctrl_en ;assign pci_devsel_en_out = ctrl_en ;// target ready output signal delayed for one clock used in conjunction with irdy_reg to select which//   data are registered in io mux module - from fifo or medoum registerreg             bckp_trdy_reg ;// delayed indicators for states transfere and backoffreg             state_transfere_reg ;reg             state_backoff_reg ;always@(posedge clk_in or posedge reset_in)begin    if (reset_in)    begin        bckp_trdy_reg <= #`FF_DELAY 1'b1 ;        state_transfere_reg <= #`FF_DELAY 1'b0 ;        state_backoff_reg <= #`FF_DELAY 1'b0 ;    end    else    begin        bckp_trdy_reg <= #`FF_DELAY bckp_trdy_in ;        state_transfere_reg <= #`FF_DELAY state_transfere ;        state_backoff_reg <= #`FF_DELAY state_backoff ;    endend// Read control signals assignmentsassign    fetch_pcir_fifo_out =   (        (prepare_rd_fifo_data) ||        (state_wait && ~cnf_progress && ~rw_cbe0 && same_read_reg && rd_from_fifo && ~target_abort_in) ||        (bckp_trdy_en_in && ~pci_trdy_reg_in && ~cnf_progress && ~rw_cbe0 && same_read_reg && rd_from_fifo && ~pci_irdy_reg_in)                            ) ;assign  ad_load_out         =   (state_wait) ;assign  ad_load_on_transfer_out = (bckp_trdy_en_in && ~rw_cbe0) ;assign 	load_medium_reg_out =   (        (prepare_rd_fifo_data) ||        (state_wait && ~rw_cbe0 && ~cnf_progress && same_read_reg && rd_from_fifo && ~target_abort_in) ||         (~pci_irdy_reg_in && ~rw_cbe0 && ~cnf_progress && same_read_reg && rd_from_fifo && ~pci_trdy_reg_in && bckp_trdy_en_in)                                ) ;assign  sel_fifo_mreg_out = (~pci_irdy_reg_in && ~bckp_trdy_reg) ;`ifdef      HOST    `ifdef  NO_CNF_IMAGE            assign  sel_conf_fifo_out = 1'b0 ;    `else            assign  sel_conf_fifo_out = (cnf_progress || norm_access_to_conf_reg) ;    `endif`else            assign  sel_conf_fifo_out = (cnf_progress || norm_access_to_conf_reg) ;`endif// Write control signals assignmentsassign    load_to_pciw_fifo_out = (        (state_wait && (~cnf_progress && ~norm_access_to_conf_reg) && rw_cbe0 && wr_to_fifo && ~target_abort_in) ||        (state_transfere_reg && ~state_backoff && rw_cbe0 && wr_to_fifo /*&& ~disconect_wo_data_reg*/ && ~pci_irdy_reg_in && ~bckp_trdy_reg && (~cnf_progress && ~norm_access_to_conf_reg)) ||        ((state_backoff || state_backoff_reg) && rw_cbe0 && wr_to_fifo && ~pci_irdy_reg_in && ~bckp_trdy_reg && (~cnf_progress && ~norm_access_to_conf_reg))                            ) ;`ifdef      HOST    `ifdef  NO_CNF_IMAGE            assign  load_to_conf_out =  1'b0 ;    `else            assign  load_to_conf_out =  (            (state_transfere_reg && cnf_progress && rw_cbe0 && ~pci_irdy_reg_in && ~bckp_trdy_reg) ||            (state_transfere_reg && norm_access_to_conf_reg && rw_cbe0 && ~pci_irdy_reg_in && ~bckp_trdy_reg)                                        ) ;    `endif`else            assign  load_to_conf_out =  (            (state_transfere_reg && cnf_progress && rw_cbe0 && ~pci_irdy_reg_in && ~bckp_trdy_reg) ||            (state_transfere_reg && norm_access_to_conf_reg && rw_cbe0 && ~pci_irdy_reg_in && ~bckp_trdy_reg)                                        ) ;`endif// General control sigal assignmentsassign  addr_phase_out = addr_phase ;assign  last_reg_out = (pci_frame_reg_in && ~pci_irdy_reg_in) ;assign  frame_reg_out = pci_frame_reg_in ;assign	bckp_devsel_out = bckp_devsel_in ;assign  bckp_trdy_out   = bckp_trdy_in ;assign	bckp_stop_out	= bckp_stop_in ;assign  target_abort_set_out = (bckp_devsel_in && bckp_trdy_in && ~bckp_stop_in && bckp_trdy_en_in) ;// request signal for delayed sinc. modulereg master_will_request_read ;always@(posedge clk_in or posedge reset_in)begin    if ( reset_in )        master_will_request_read <= #`FF_DELAY 1'b0 ;    else        master_will_request_read <= #`FF_DELAY ((state_wait && ~target_abort_in) || (state_backoff && ~target_abort_set_out)) && ~cnf_progress && ~norm_access_to_conf_reg && ~rw_cbe0 && rd_request ;end// MORE OPTIMIZED READS, but not easy to control in a testbench!//assign  req_out = master_will_request_read ; assign req_out = master_will_request_read && !pci_irdy_reg_in && !read_processing_in ;// ready tells when address or data are written into fifo - RDY ? DATA : ADDRESSassign  rdy_out = ~bckp_trdy_reg ;// data and address outputs assignments!assign  pci_ad_out = data_in ;assign  data_out = pci_ad_reg_in ;assign  be_out = pci_cbe_reg_in ;assign  next_be_out = pci_cbe_in ;assign  address_out = pci_ad_reg_in ;assign  bc_out = pci_cbe_reg_in ;assign  bc0_out = rw_cbe0 ;endmodule

⌨️ 快捷键说明

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