久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3251|回復: 0
收起左側

基于FPGA片上最小系統(xiaoze-soc)的總線設計

[復制鏈接]
ID:224778 發表于 2017-8-4 19:01 | 顯示全部樓層 |閱讀模式
頂層文件/*
該設計是小澤的首個基于fpga片上最小系統(xiaoze——soc)的總線設計
by :mr小澤
QQ : 3280283157
from : 天津工業大學電氣工程與自動化學院

//***********************************

總線主控——四路;                                                                           

總線從屬——八路:                                   
0號——只讀存儲器rom
1號——暫存存儲器spm
2號——計時器
3號——usrat
4號——gpio
5號——空
6號——空
7號——空

設計包括(由頂向下):
(1)xiaoze_bus(TOP)
(2)xiaoze_sover(總線主控仲裁&分配)
(3)xiaoze_wire(總線主控寫入相應數據)
(4)xiaoze_dec(地址解碼)
(5)xiaoze_read(總線從屬讀取數據)

//************************************
*/
module xiaoze_bus(
                    input  clk,
                                                  input  rst_n,
                                                
                    input  m0_ask, //總線主控0——請求
                                                  input  m1_ask, //總線主控1——請求
                                                  input  m2_ask, //總線主控2——請求
                                                  input  m3_ask, //總線主控3——請求
                                                  
                                                  input  m0_as, //m0總線控制選通信號
                                                  input  m0_rw, //m0總線控制“讀/寫”命令信號
                                                  input  m0_addr, //m0總線控制地址信號
                                                  input  m0_addr_data, //m0總控信號地址數據
                                                  
                                                  input  m1_as, //m1總線控制選通信號
                                                  input  m1_rw, //m1總線控制“讀/寫”命令信號
                                                  input  m1_addr, //m1總線控制地址信號
                                                  input  m1_addr_data, //m1總控信號地址數據
                                                  
                                                  input  m2_as, //m2總線控制選通信號
                                                  input  m2_rw, //m2總線控制“讀/寫”命令信號
                                                  input  m2_addr, //m2總線控制地址信號
                                                  input  m2_addr_data, //m2總控信號地址數據                                          
                                                  
                                                  input  m3_as, //m3總線控制選通信號
                                                  input  m3_rw, //m3總線控制“讀/寫”命令信號
                                                  input  m3_addr, //m3總線控制地址信號
                                                  input  m3_addr_data, //m3總控信號地址數據
                                                  
                                                  input [31:0] s0_data, //總線從屬要讀取的數據
                                   input [31:0] s1_data, //總線從屬要讀取的數據
                              input [31:0] s2_data, //總線從屬要讀取的數據
                                   input [31:0] s3_data, //總線從屬要讀取的數據
                    input [31:0] s4_data, //總線從屬要讀取的數據
                                   input [31:0] s5_data, //總線從屬要讀取的數據
                              input [31:0] s6_data, //總線從屬要讀取的數據
                                   input [31:0] s7_data, //總線從屬要讀取的數據
                                                  
                                                  input  s0_rdy, //總線從屬0就緒
                                             input  s1_rdy, //總線從屬1就緒
                                             input  s2_rdy, //總線從屬2就緒
                                             input  s3_rdy, //總線從屬3就緒
                                                  input  s4_rdy, //總線從屬4就緒
                                             input  s5_rdy, //總線從屬5就緒
                                             input  s6_rdy, //總線從屬6就緒
                                             input  s7_rdy, //總線從屬7就緒
                                                  
                                                  output wire s0_cs,
                                                  output wire s1_cs,
                                                  output wire s2_cs,
                                                  output wire s3_cs,
                                                  output wire s4_cs,
                                                  output wire s5_cs,
                                                  output wire s6_cs,
                                                  output wire s7_cs,        
                                                  
                                                  output wire  s_as, //總線控制選通信號——最終輸出
                                                  output wire  s_rw, //總線控制“讀/寫”命令信號——最終輸出
                                                  output wire [31:0] s_addr, //總線控制地址信號——最終輸出
                                                  output wire [31:0] s_addr_data, //總控信號地址數據——最終輸出
                                                  
                                                  output wire m_rdy, //總線從屬0就緒——最終輸出
                    output wire [31:0] m_data //總線從屬將讀取的數據輸出——最終輸出
                                                  
                  );
                                                
//******************************定義區********************************************
                    wire  m0_agree;
                                                  wire  m1_agree;
                                                  wire  m2_agree;
                                                  wire  m3_agree;                        
//*******************************************************************************                                                
xiaoze_sover      i1(
                   .clk(clk),
                                                 .rst_n(rst_n),
                                                
                   .m0_ask(m0_ask),
                                                 .m1_ask(m1_ask),
                                                 .m2_ask(m2_ask),
                                                 .m3_ask(m3_ask),
                                                
                                                 .m0_agree(m0_agree),
                                                 .m1_agree(m1_agree),
                                                 .m2_agree(m2_agree),
                                                 .m3_agree(m3_agree)  
                                                 );
//********************************************************************************
        
        
        
        
//********************************************************************************        
xiaoze_wire       i2(
                                                  .m0_agree(m0_agree),
                                                  .m1_agree(m1_agree),
                                                  .m2_agree(m2_agree),
                                                  .m3_agree(m3_agree),
                                                  
                                                  .m0_as(m0_as),
                                                  .m0_rw(m0_rw),
                                                  .m0_addr(m0_addr),
                                                  .m0_addr_data(m0_addr_data),
                                                  
                                                  .m1_as(m1_as),
                                                  .m1_rw(m1_rw),
                                                  .m1_addr(m1_addr),
                                                  .m1_addr_data(m1_addr_data),
                                                  
                                                  .m2_as(m2_as),
                                                  .m2_rw(m2_rw),
                                                  .m2_addr(m2_addr),
                                                  .m2_addr_data(m2_addr_data),                                          
                                                  
                                                  .m3_as(m3_as),
                                                  .m3_rw(m3_rw),
                                                  .m3_addr(m3_addr),
                                                  .m3_addr_data(m3_addr_data),
                                                  
                                                  
                                                  .s_as(s_as),
                                                  .s_rw(s_rw),
                                                  .s_addr(s_addr),
                                                  .s_addr_data(s_addr_data)
                                          );
//**********************************************************************************        




//**********************************************************************************        
xiaoze_dec       i3(
                  .s_addr(s_cs), //s總線控制地址信號
                                                
                                                .s0_cs(s0_cs),
                                                .s1_cs(s1_cs),
                                                .s2_cs(s2_cs),
                                                .s3_cs(s3_cs),
                                                .s4_cs(s4_cs),
                                                .s5_cs(s5_cs),
                                                .s6_cs(s6_cs),
                                                .s7_cs(s7_cs)                        
                  );
//***********************************************************************************                                                


//***********************************************************************************
xiaoze_read       i4(
                  .s0_cs(s0_cs),
                                                .s1_cs(s1_cs),
                                                .s2_cs(s2_cs),
                                                .s3_cs(s3_cs),
                                                .s4_cs(s4_cs),
                                                .s5_cs(s5_cs),
                                                .s6_cs(s6_cs),
                                                .s7_cs(s7_cs),        
                                                
                                                .s0_rdy(s0_rdy),
                                           .s1_rdy(s1_rdy),  
                                           .s2_rdy(s2_rdy),  
                                           .s3_rdy(s3_rdy),
                                                .s4_rdy(s4_rdy),
                                           .s5_rdy(s5_rdy),  
                                           .s6_rdy(s6_rdy),  
                                           .s7_rdy(s7_rdy),  
                                                   
                  .s0_data(s0_data),
                                 .s1_data(s1_data),
                            .s2_data(s2_data),
                                 .s3_data(s3_data),
                  .s4_data(s4_data),
                                 .s5_data(s5_data),
                            .s6_data(s6_data),
                                 .s7_data(s7_data),

                                                
                                                .m_rdy(m_rdy),
                  .m_data(m_data)
                                                   );
//***********************************************************************************
endmodule        



總線仲裁
//總線主控仲裁器


`include "xiaoze_bus.h"
`timescale 1 ns / 1 ps
module xiaoze_sover(
                   input  clk,
                                                 input  rst_n,
                                                
                   input  m0_ask, //總線主控0——請求
                                                 input  m1_ask, //總線主控1——請求
                                                 input  m2_ask, //總線主控2——請求
                                                 input  m3_ask, //總線主控3——請求
                                                
                                                 output reg m0_agree, //總線主控0——請求成功
                                                 output reg m1_agree, //總線主控0——請求成功
                                                 output reg m2_agree, //總線主控0——請求成功
                                                 output reg m3_agree  //總線主控0——請求成功
                                                 );
                                                
//******************************定義區******************************************

      reg [2:0] woner;

//*****************************************************************************






//***************************仲裁模塊設計****************************************
     always@(posedge clk or negedge rst_n)
            if(!rst_n) woner <= #1 `M0_SOVER;
                 
                 else begin
                   case(woner)
                          `M0_SOVER : begin
                            if(m0_ask) woner <= #1 `M0_SOVER;
                                 else if(m1_ask) woner <= #1 `M1_SOVER;  
                            else if(m2_ask) woner <= #1 `M2_SOVER;  
             else if(m3_ask) woner <= #1 `M3_SOVER;
                          end
                          
                           `M1_SOVER : begin
                            if(m1_ask) woner <= #1 `M1_SOVER;
                                 else if(m2_ask) woner <= #1 `M2_SOVER;  
                            else if(m3_ask) woner <= #1 `M3_SOVER;  
             else if(m0_ask) woner <= #1 `M0_SOVER;
                          end
                          
                          `M2_SOVER : begin
                            if(m2_ask) woner <= #1 `M2_SOVER;
                                 else if(m3_ask) woner <= #1 `M3_SOVER;  
                            else if(m0_ask) woner <= #1 `M0_SOVER;  
             else if(m1_ask) woner <= #1 `M1_SOVER;
                          end
                          
                           `M3_SOVER : begin
                            if(m3_ask) woner <= #1 `M3_SOVER;
                                 else if(m0_ask) woner <= #1 `M0_SOVER;  
                            else if(m1_ask) woner <= #1 `M1_SOVER;  
             else if(m2_ask) woner <= #1 `M2_SOVER;
                          end
                          
                          default : woner <= #1 `M0_SOVER;
                        endcase
                 end
//******************************************************************************
                          
                          
                          
                          
                          
                          
//***********************總線主控賦值模塊*****************************************
always@(*) begin   

    m0_agree <= 1'b 0;
         m1_agree <= 1'b 0;
         m2_agree <= 1'b 0;
         m3_agree <= 1'b 0;
        
    case(woner)
     `M0_SOVER : m0_agree <= 1'b 1;

          `M1_SOVER : m1_agree <= 1'b 1;

     `M2_SOVER : m2_agree <= 1'b 1;

          `M3_SOVER : m3_agree <= 1'b 1;
    endcase        
  end

//*****************************************************************************   

endmodule   



從從屬讀取數據
//總線從屬讀取數據


`include "xiaoze_bus.h"
`timescale 1 ns / 1 ps

module xiaoze_read(
                  input  s0_cs,
                                                input  s1_cs,
                                                input  s2_cs,
                                                input  s3_cs,
                                                input  s4_cs,
                                                input  s5_cs,
                                                input  s6_cs,
                                                input  s7_cs,
                                                
                                                input  s0_rdy, //總線從屬0就緒
                                           input  s1_rdy, //總線從屬1就緒
                                           input  s2_rdy, //總線從屬2就緒
                                           input  s3_rdy, //總線從屬3就緒
                                                input  s4_rdy, //總線從屬4就緒
                                           input  s5_rdy, //總線從屬5就緒
                                           input  s6_rdy, //總線從屬6就緒
                                           input  s7_rdy, //總線從屬7就緒
                                                   
                  input [31:0] s0_data, //總線從屬要讀取的數據
                                 input [31:0] s1_data, //總線從屬要讀取的數據
                            input [31:0] s2_data, //總線從屬要讀取的數據
                                 input [31:0] s3_data, //總線從屬要讀取的數據
                  input [31:0] s4_data, //總線從屬要讀取的數據
                                 input [31:0] s5_data, //總線從屬要讀取的數據
                            input [31:0] s6_data, //總線從屬要讀取的數據
                                 input [31:0] s7_data, //總線從屬要讀取的數據

                                                
                                                output reg m_rdy, //總線從屬0就緒——最終輸出
                  output reg [31:0] m_data //總線從屬將讀取的數據輸出——最終輸出
                                                   );
                                                        
                                                        
//*********************************************************
always@(*) begin

  if(s0_cs) begin
    m_rdy <= s0_rdy;
    m_data <= s0_data;
  end

  else if(s1_cs) begin
    m_rdy <= s1_rdy;
    m_data <= s1_data;
  end
            
  else if(s2_cs) begin
   m_rdy <= s2_rdy;
   m_data <= s2_data;
  end

  else if(s3_cs) begin
    m_rdy <= s3_rdy;
    m_data <= s3_data;
  end
            
  else if(s4_cs) begin
   m_rdy <= s4_rdy;
   m_data <= s4_data;
  end

   else if(s5_cs) begin
   m_rdy <= s5_rdy;
   m_data <= s5_data;
  end

  else if(s6_cs) begin
    m_rdy <= s6_rdy;
    m_data <= s6_data;
  end
            
  else if(s7_cs) begin
   m_rdy <= s7_rdy;
   m_data <= s7_data;
  end
end
//***********************************************************
endmodule

主控寫數據
//總線從屬讀取數據


`include "xiaoze_bus.h"
`timescale 1 ns / 1 ps

module xiaoze_read(
                  input  s0_cs,
                                                input  s1_cs,
                                                input  s2_cs,
                                                input  s3_cs,
                                                input  s4_cs,
                                                input  s5_cs,
                                                input  s6_cs,
                                                input  s7_cs,
                                                
                                                input  s0_rdy, //總線從屬0就緒
                                           input  s1_rdy, //總線從屬1就緒
                                           input  s2_rdy, //總線從屬2就緒
                                           input  s3_rdy, //總線從屬3就緒
                                                input  s4_rdy, //總線從屬4就緒
                                           input  s5_rdy, //總線從屬5就緒
                                           input  s6_rdy, //總線從屬6就緒
                                           input  s7_rdy, //總線從屬7就緒
                                                   
                  input [31:0] s0_data, //總線從屬要讀取的數據
                                 input [31:0] s1_data, //總線從屬要讀取的數據
                            input [31:0] s2_data, //總線從屬要讀取的數據
                                 input [31:0] s3_data, //總線從屬要讀取的數據
                  input [31:0] s4_data, //總線從屬要讀取的數據
                                 input [31:0] s5_data, //總線從屬要讀取的數據
                            input [31:0] s6_data, //總線從屬要讀取的數據
                                 input [31:0] s7_data, //總線從屬要讀取的數據

                                                
                                                output reg m_rdy, //總線從屬0就緒——最終輸出
                  output reg [31:0] m_data //總線從屬將讀取的數據輸出——最終輸出
                                                   );
                                                        
                                                        
//*********************************************************
always@(*) begin

  if(s0_cs) begin
    m_rdy <= s0_rdy;
    m_data <= s0_data;
  end

  else if(s1_cs) begin
    m_rdy <= s1_rdy;
    m_data <= s1_data;
  end
            
  else if(s2_cs) begin
   m_rdy <= s2_rdy;
   m_data <= s2_data;
  end

  else if(s3_cs) begin
    m_rdy <= s3_rdy;
    m_data <= s3_data;
  end
            
  else if(s4_cs) begin
   m_rdy <= s4_rdy;
   m_data <= s4_data;
  end

   else if(s5_cs) begin
   m_rdy <= s5_rdy;
   m_data <= s5_data;
  end

  else if(s6_cs) begin
    m_rdy <= s6_rdy;
    m_data <= s6_data;
  end
            
  else if(s7_cs) begin
   m_rdy <= s7_rdy;
   m_data <= s7_data;
  end
end
//***********************************************************
endmodule




回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 夜夜草 | 久久精品一二三影院 | 美国av片在线观看 | www.日韩 | 中文字幕乱码一区二区三区 | 欧美一区二 | 欧美久久一区二区 | 成人免费视频观看 | 欧美日韩精品中文字幕 | 久久久久久久久国产成人免费 | 国产精品免费播放 | 久久成人精品视频 | 国产精品久久久久久一区二区三区 | 伊人性伊人情综合网 | 久久天天躁狠狠躁夜夜躁2014 | 91久久综合亚洲鲁鲁五月天 | 日韩美女在线看免费观看 | 亚洲综合日韩精品欧美综合区 | 丝袜美腿一区二区三区动态图 | 欧美日韩中文字幕 | 日本成年免费网站 | 祝你幸福电影在线观看 | 国产在线一区二区 | 亚洲成人av | 国产精品99久久久久久动医院 | 精品视频一区二区三区 | 成人亚洲片 | 一区二区三区中文字幕 | 成人一级视频在线观看 | 欧美精品日韩精品国产精品 | 免费麻豆视频 | 亚洲天堂成人在线视频 | 国产91视频播放 | 亚洲精品久久久 | 国产精品成人在线播放 | 亚洲国产精品美女 | 成人免费在线播放视频 | 色综合激情 | 91免费小视频 | 欧美精品一区二区三区在线播放 | 人人射人人插 |