高云SOC芯片GW1NSR-LV4CQN48的ARM总线

国产GOWIN高云出的一款芯片是GW1NSR-LV4CQN48PC7/I6,QN48封装,资源是4608,有10个18K BRAM,以及2个PLL,内置HyperRAM 64Mb, 可以用于电机,图像测试。内置ARM-M3硬核,可以替换简单的MCU应用。

其中ARM和FPGA的总线连接是两种AHB和APB总线。以下介绍的基本总线的连接代码。

其中AHB总线是包含BURST突发模式读取数据内容。实际从波形调试可以得到每次突发模式8个数据内容。

module Gowin_AHB_Multiple

(

output      wire [31:0]        AHB_HRDATA,

output      wire                    AHB_HREADY,

output      wire [ 1:0]         AHB_HRESP,

input         wire [ 1:0]  AHB_HTRANS,

input         wire [ 2:0]  AHB_HBURST,

input         wire [ 3:0]  AHB_HPROT,

input         wire [ 2:0]         AHB_HSIZE,

input         wire                    AHB_HWRITE,

input         wire                    AHB_HMASTLOCK,

input         wire [ 3:0]         AHB_HMASTER,

input         wire [31:0]        AHB_HADDR,

input         wire [31:0]  AHB_HWDATA,

input         wire                    AHB_HSEL,

input         wire                    AHB_HCLK,

input         wire                    AHB_HRESETn

);

//The AHB BUS is always ready

assign AHB_HREADY = 1'b1; //ready signal, slave to MCU master

//Response OKAY

assign AHB_HRESP  = 2'b0;//response signal, slave to MCU master

//Define Reg for AHB BUS

reg [31:0]  ahb_address;

reg           ahb_control;

reg         ahb_sel;

reg         ahb_htrans;

always @(posedge AHB_HCLK or negedge AHB_HRESETn)

begin

if(~AHB_HRESETn)

begin

ahb_address  <= 32'b0;

ahb_control  <= 1'b0;

ahb_sel      <= 1'b0;

ahb_htrans   <= 1'b0;

end

else              //Select The AHB Device

begin                             //Get the Address of reg

ahb_address  <= AHB_HADDR;

ahb_control  <= AHB_HWRITE;

ahb_sel      <= AHB_HSEL;

ahb_htrans   <= AHB_HTRANS[1];

end

end

wire write_enable = ahb_htrans & ahb_control    & ahb_sel;

wire read_enable  = ahb_htrans & (!ahb_control) & ahb_sel;

//The register of Multiple AHB bus

reg [7:0 ] Multiplier;

reg [7:0 ] Multiplicand;

reg [15:0] The_result;

reg [1:0 ] Cmd_reg; //The Bit0 -> Start

//The Bit1 -> The State of Multiple

wire        cmd_finished_status ;

wire [15:0] wire_multiple_result;

//write data to AHB bus

always @(posedge AHB_HCLK or negedge AHB_HRESETn)

begin

if(~AHB_HRESETn)

begin

Multiplier   <= 8'b0;

Multiplicand <= 8'b0;

end

else if(write_enable)

begin

case (ahb_address[15:0])

16'h0000: Multiplier       <= AHB_HWDATA[7:0];

16'h0004: Multiplicand  <= AHB_HWDATA[7:0];

endcase

end

end

//Status

always @(posedge AHB_HCLK or negedge AHB_HRESETn)

begin

if(~AHB_HRESETn)

begin

Cmd_reg  <=  2'b0;

end

else if(write_enable &(ahb_address[15:0] == 16'h0008))

begin

Cmd_reg  <= AHB_HWDATA[1:0];

end

else if(cmd_finished_status)

begin

Cmd_reg  <=  2'b10;

end

end

//read data to AHB bus

always @(posedge AHB_HCLK or negedge AHB_HRESETn)

begin

if(~AHB_HRESETn)

begin

The_result     <=    16'b0;

end

else if(cmd_finished_status)

begin

The_result      <=     wire_multiple_result;

end

end

//register address

reg [31:0] ahb_rdata;

always @(*)

begin

if(read_enable)  //read cmd

begin

case (ahb_address[15:0])

32'h0000:  ahb_rdata = Multiplier;

32'h0004:  ahb_rdata = Multiplicand;

32'h0008:  ahb_rdata = Cmd_reg;

32'h000C:  ahb_rdata = The_result;

default:ahb_rdata = 32'hFFFFFFFF;

endcase

end

else

begin

ahb_rdata = 32'hFFFFFFFF;

end

end

assign AHB_HRDATA = ahb_rdata;

而对于APB的总线,一次性只能读取一个数据内容。

module Gowin_APB2_Multiple

(

//---------------------The Port declartion--------

input          pclk,       // master clock input

input          presetn,    //synchronous active low reset

input          psel,       //slave sel

input          penable,    //enable

input          pwrite,     //transmit direction

input   [11:2] paddr,      //lower address bits

input   [31:0] pwdata,     //write data

output  [31:0] prdata      //read data

);

wire write_enable = psel    & pwrite    & (!penable);

wire read_enable  = psel    & (!pwrite) &   penable;

//The register of apb bus

reg [7:0 ] Multiplier;

reg [7:0 ] Multiplicand;

reg [15:0] The_result;

reg [1:0 ] Cmd_reg; //The Bit0 -> Start

//The Bit1 -> The State of Multiple

//write Block

always @(posedge pclk or negedge presetn)

begin

if(~presetn)

begin

Multiplier      <=  8'b0;

Multiplicand    <=  8'b0;

end

else

begin

if(write_enable)

begin

case (paddr[11:2])

10'h00: Multiplier      <= pwdata;

10'h01: Multiplicand    <= pwdata;

endcase

end

end

end

reg [31:0] prdata_out;

//Read Block

always @(*)

begin

if (read_enable)

begin

case (paddr[11:2])

10'h00:  prdata_out = Multiplier;

10'h01:  prdata_out = Multiplicand;

10'h02:  prdata_out = Cmd_reg;

10'h03:  prdata_out = The_result;

default: prdata_out = 32'hFFFFFFFF;//Indicate the unvalid state

endcase

end

else

begin

prdata_out  = 32'hFFFFFFFF;

end

end

assign prdata = prdata_out;

高云SOC芯片GW1NSR-LV4CQN48的ARM总线的更多相关文章

  1. ARM总线方面知识

    AMBA简介 随着深亚微米工艺技术日益成熟,集成电路芯片的规模越来越大.数字IC从基于时序驱动的设计方法,发展到基于IP复用的设计方法,并在SOC设计中得到了广泛应用.在基于IP复用的SoC设计中,片 ...

  2. SOC芯片的FPGA原型验证

    FPGA验证在SOC设计非常重要,一般而言,做一些RAM和FIFO的替换以及相应代码转换.具体分下面几步: 1 替换RAM,FIFO和时钟 RAM和FIFO控制器需要RAM的接口都放在了设计顶层,方便 ...

  3. IN612 IN612L蓝牙5.0 SoC芯片替换NRF52832/NRF52840

    IN612L是美国公司INPLAY的SOC产品系列之一,具有多模协同2.4G无线协议栈,支持2.4G私有协议栈以及蓝牙5.0全协议栈的SOC芯片.如2mbps高数据速率模式,125kbps/500kb ...

  4. ASR6601:国产化lora SOC芯片兼容SX1262/SX1268

    ASR6601为目前首颗国产化支持LoRaWAN低功耗广域网无线通信SoC芯片.ASR6601在单芯片上集成了通用微控制器和射频单元(SX1262),包括射频收发器,调制解调器和48 MHz 主频.A ...

  5. Hi3518 网络监控SOC芯片规格参数

    Hi3518 网络监控SOC芯片 视频编解码   处理器内核 ●   ARM926@ 440MHz,16KB I-Cache ,16KB D-Cache 视频编码 ●   H.264 Main Pro ...

  6. CPU缓存是位于CPU与内存之间的临时数据交换器,它的容量比内存小的多但是交换速度却比内存要快得多。CPU缓存一般直接跟CPU芯片集成或位于主板总线互连的独立芯片上

    一.什么是CPU缓存 1. CPU缓存的来历 众所周知,CPU是计算机的大脑,它负责执行程序的指令,而内存负责存数据, 包括程序自身的数据.在很多年前,CPU的频率与内存总线的频率在同一层面上.内存的 ...

  7. CI2454国产8位RISC核SoC芯片

    Ci2454是一款集成无线收发器和8位RISC(精简指令集)MCU的SOC芯片.主要应用在遥控玩具.智能灯控.数据透传.工业控制等领域.无线收发器主要特性 工作在 2.4GHz ISM 频段. 调制方 ...

  8. 手机Soc芯片简介

    手机SoC(System On a Chip,在一个芯片里面集成CPU.GPU.SP.ISP.RAM内存.Wi-Fi控制器.基带芯片以及音频芯片等)芯片(基于arm架构指令集) 高通骁龙(Snapdr ...

  9. ARM总线架构

    S3C2440集成了丰富了外设控制器(LCD控制器.USB Device控制器.USB Host控制器.NAND FLASH控制器.I2C控制器.SPI控制器等).要控制这些外设就要设置相应控制器的寄 ...

  10. Nordic nRF52820超低功耗蓝牙5.2 SoC芯片-低端无线连接方案首选

    nRF52820是功耗超低的低功耗蓝牙 (Bluetooth Low Energy /Bluetooth LE).蓝牙mesh.Thread.Zigbee和2.4 GHz专有低端无线连接解决方案.nR ...

随机推荐

  1. redis---面经

    redis 偏应用的总结:redis 应用 Redis是什么? Redis是什么 对象 字符串 自增,键值对. SDS数据结构记录长度,已经使用,和总共长度,并且提前多余出容量,防止一直扩容缩容. 字 ...

  2. vscode 当做记事本,用任务 tasks 自动提交git - ctrl shift B

    vscode 当做记事本,用任务 tasks 自动提交git - ctrl shift B 起因 开始用的joplin 本地记事本挺好,唯一缺点不能同步. 用了一下,发现markdown是两栏的,变成 ...

  3. Prettier 和 ESLint 冲突解决方案 eslint-config-prettier eslint-plugin-prettier

    划重点 eslint-config-prettier 禁用 eslint 冲突配置 eslint-plugin-prettier Prettier先格式化 (默认是先eslint格式化,再Pretti ...

  4. 基于2.4G私有协议的无线取餐系统设及实现

    前记  最近在使用TLSR8355做几个小产品.正好赶上有客户需要一个无线取餐系统解决方案.笔者分析了一下需求.该芯片有充足的按键,LED灯,GPIO接口等.做这一款产品是顺道的事情. 需求梳理  功 ...

  5. "高绩效"指南

    前言 最近被问到一个问题,在工作中,如何拿高绩效.或者换一种表达方式,如何成为老板的"嫡系". 在这里我想简单谈一谈我的想法,可能不准确,各位看官,当饭后茶语罢了. 为了更加有说服 ...

  6. WPF线程模型

    1. 渲染系统概述 WPF 采用保留模式渲染系统 (Retained Mode Rendering System),该系统可分为 UI 线程和复合线程两个主要部分,两者协作完成 WPF 应用程序的渲染 ...

  7. Oracle 隐式数据类型转换

    Oracle类型转换规则: 对于insert和update操作,oracle将值转换为受影响的的列的类型. 对于select操作,oracle会将列的值的类型转换为目标变量的类型. 看如下实验: 1. ...

  8. KingbaseES 数据库CPU使用率过高问题与解决

    前言 本文介绍生产环境中CPU使用率高的常见原因,以及在CPU使用率高问题上的可能解决措施. 本文主要内容: 关于用于识别高CPU使用率的工具,例如kwr报告中DB CPU指标.kmonitor和sy ...

  9. UEFI引导双系统安装archlinux后安装windows8.1,os-prober无法探测,生成grub.cfg没有windows

    1.os-prober无法探测 可能是os-prober未启用 启用os-prober: sudo vim /etc/default/grub 添加: GRUB_DISABLE_OS_PROBER=f ...

  10. Tarjan 算法——图论学习笔记

    Part.1 引入 在图论问题中,我们经常去研究一些连通性问题,比如: 有向图的联通性:传递闭包--Floyd 算法: 有向图连通性的对称性:强联通分量(SCC)--Tarjan 算法缩点: 无向图的 ...