zoukankan      html  css  js  c++  java
  • Avalon Slave外设简单实现——DE1-SOC学习笔记(2)

               在前一篇文里已经整理了一些Cyclone-V与Avalon-MM的资料,在这篇文里给一个 Slave设备的简单实现——7段数码管实现。

           先上一个Avalon-MM的一般时序图:

    image_thumb46_thumb

        一、硬件设计

          IP逻辑实现:

          当作为Avalon总线的Slave时,上图中的控制信号、地址信号都为输入,另外还会有一个ChipSlect信号。当有设备发出对该设备的read/write请求时,ChipSlect信号有效,同时addres为从设备的寄存器地址。例如该设备基址为0x0100,有两个32位寄存器,那么当某主设备发出地址0x0104选中该设备时,ChipSelect有效,同时从设备收到的Address为1(在该例中地址以words为单位)。

          7段数码管控制器是一个只写设备,故只需要clk,chipselect,address,write,及writedata信号即可。SystemVerilog实现逻辑如下:

    //seg7.sv
    module BCD2Seg(
     input logic [3:0] din,
     output logic [7:0] dout
     );
     
        always_comb
        begin
        case (din)
        'b0000:dout<='b100_0000;
        'b0001:dout<='b111_1001;
        'b0010:dout<='b111_1001;
        'b0011:dout<='b011_0000;
        'b0100:dout<='b001_1001;
        'b0101:dout<='b010_0010;
        'b0110:dout<='b000_0010;
        'b0111:dout<='b111_1000;
        'b1000:dout<='b000_0000;
        'b1001:dout<='b001_0000;
        default:dout<='b111_1111;
        endcase
       end
     endmodule 
     
     module seg7_disp  #(parameter N=6)(
    input logic clk,reset,chipselect,
     input logic [3:0]byteenable,
     input logic write,
     input logic [31:0] writedata,
     output logic [47:0] segout
     );
     //assert(N<=8);
     logic [N-1:0][3:0] bcdcon;//to decoder
     genvar i;
     generate 
        for(i=0;i<N;i++)
            begin:gen1
            BCD2Seg ui(.din(bcdcon[i][3:0]),.dout(segout[i*8+7:8*i]));
            end
     endgenerate 
     always @(posedge clk)
     begin
        if(reset)
            bcdcon<=0;
        if(chipselect=='b1)
            begin
            if(write)
            bcdcon    <=writedata;
            end
     end
     
     endmodule

          Avalon 总线IP封装

       1)打开Qsys,在IP Catalog中选择New Component 新建用户器件(IP Core),编辑必要的信息并选择文件,Analyze File

    image_thumb[1]

        2)编辑Signals和Interfaces选项卡,根据Module信号的功能选择对应的SignalType,在Interfaces选项卡设置clock.reset,以及avalon信号的parameter

    image_thumb[3]

    image_thumb[6]

    image_thumb[8]

    注意:这里WORDS与SYMBOL的区别

           3)完成编辑,保存

         系统搭建

          1)在Qsys中加入自定义的IP seg7,连接至hps的h2f_lw_axi_master接口,分配基址

    image_thumb[10]

         2)Generate HDL,返回至Quartus II
         3)连接外部信号
         4) 编译

    二) 软件设计

  • 相关阅读:
    SQL逻辑查询语句执行顺序
    数据库索引的实现原理
    JAVAMail邮件服务器
    TCP/IP基础
    Java IO流学习总结
    [Lydsy1806月赛] 超速摄像头
    CodeForces
    SCU
    CodeForces
    CodeForces
  • 原文地址:https://www.cnblogs.com/blinkingstar/p/4299022.html
Copyright © 2011-2022 走看看