高云SOC芯片GW1NSR-LV4CQN48的ARM总线
高云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总线的更多相关文章
- ARM总线方面知识
AMBA简介 随着深亚微米工艺技术日益成熟,集成电路芯片的规模越来越大.数字IC从基于时序驱动的设计方法,发展到基于IP复用的设计方法,并在SOC设计中得到了广泛应用.在基于IP复用的SoC设计中,片 ...
- SOC芯片的FPGA原型验证
FPGA验证在SOC设计非常重要,一般而言,做一些RAM和FIFO的替换以及相应代码转换.具体分下面几步: 1 替换RAM,FIFO和时钟 RAM和FIFO控制器需要RAM的接口都放在了设计顶层,方便 ...
- IN612 IN612L蓝牙5.0 SoC芯片替换NRF52832/NRF52840
IN612L是美国公司INPLAY的SOC产品系列之一,具有多模协同2.4G无线协议栈,支持2.4G私有协议栈以及蓝牙5.0全协议栈的SOC芯片.如2mbps高数据速率模式,125kbps/500kb ...
- ASR6601:国产化lora SOC芯片兼容SX1262/SX1268
ASR6601为目前首颗国产化支持LoRaWAN低功耗广域网无线通信SoC芯片.ASR6601在单芯片上集成了通用微控制器和射频单元(SX1262),包括射频收发器,调制解调器和48 MHz 主频.A ...
- Hi3518 网络监控SOC芯片规格参数
Hi3518 网络监控SOC芯片 视频编解码 处理器内核 ● ARM926@ 440MHz,16KB I-Cache ,16KB D-Cache 视频编码 ● H.264 Main Pro ...
- CPU缓存是位于CPU与内存之间的临时数据交换器,它的容量比内存小的多但是交换速度却比内存要快得多。CPU缓存一般直接跟CPU芯片集成或位于主板总线互连的独立芯片上
一.什么是CPU缓存 1. CPU缓存的来历 众所周知,CPU是计算机的大脑,它负责执行程序的指令,而内存负责存数据, 包括程序自身的数据.在很多年前,CPU的频率与内存总线的频率在同一层面上.内存的 ...
- CI2454国产8位RISC核SoC芯片
Ci2454是一款集成无线收发器和8位RISC(精简指令集)MCU的SOC芯片.主要应用在遥控玩具.智能灯控.数据透传.工业控制等领域.无线收发器主要特性 工作在 2.4GHz ISM 频段. 调制方 ...
- 手机Soc芯片简介
手机SoC(System On a Chip,在一个芯片里面集成CPU.GPU.SP.ISP.RAM内存.Wi-Fi控制器.基带芯片以及音频芯片等)芯片(基于arm架构指令集) 高通骁龙(Snapdr ...
- ARM总线架构
S3C2440集成了丰富了外设控制器(LCD控制器.USB Device控制器.USB Host控制器.NAND FLASH控制器.I2C控制器.SPI控制器等).要控制这些外设就要设置相应控制器的寄 ...
- Nordic nRF52820超低功耗蓝牙5.2 SoC芯片-低端无线连接方案首选
nRF52820是功耗超低的低功耗蓝牙 (Bluetooth Low Energy /Bluetooth LE).蓝牙mesh.Thread.Zigbee和2.4 GHz专有低端无线连接解决方案.nR ...
随机推荐
- TypeScript实践总结
下文将TypeScript简称ts 一.为什么要学 1.1 减少bug,提高质量 强语言,语法等方面异常,编译阶段"提前"报错 支持面向对象,软件设计与工程化更为成熟,更容易做单元 ...
- Git 系列:简介安装以及配置管理
目录 简介安装 简介 Centos安装 配置管理 git help 概要 选项 示例 git-doc git config 概要 选项 变量 示例 初始化配置 简介安装 简介 https://git- ...
- vscode 格式化空格,constructor 构造函数的空格 会有问题,找到一个配置文件好使
Ctrl+Shift+P "javascript.format.enable": false, "javascript.format.insertSpaceAfterCo ...
- WPF之事件
目录 WPF的树形结构 事件 路由事件 使用WPF内置路由事件 自定义路由事件 ButtonBase类的Click路由事件 创建一个路由事件 RoutedEventArgs的Source与Origin ...
- 关于vscode的复制粘贴的问题
有的是因为安装了vim的插件,卸掉即可.或者直接在快捷键设置里面直接改变复制粘贴的快捷键!
- 关于wine乱码问题的解决方法
在我的百度网盘里面,以及U盘备份,里面的Fonts.zip文件, 使用unzip Fonts.zip----linux指令 把这个文件夹里面的所有文件复制到wine的映射目录里面 cp Fonts/* ...
- java unsigned int,int,long
java 中没有unsigned int,处理这个要采用long. int x = (1<<31) 与int x= -(1<<31)答案是相同的 0xffff ffff 与0x ...
- 3DCAT实时云渲染赋能聚好看科技,打造3D沉浸式互动视频云平台
随着5G.云计算.XR等技术的发展,3D沉浸式互动视频已经成为了新一代的数字媒体形式,为各行各业带来了新的创新机遇和价值.然而,要实现高效.高质.高效率的3D沉浸式互动视频生产和传播,还需要强大的技术 ...
- 为什么ASP.NET Core的路由处理器可以使用一个任意类型的Delegate
毫不夸张地说,路由是ASP.NET Core最为核心的部分.路由的本质就是注册一系列终结点(Endpoint),每个终结点可以视为"路由模式"和"请求处理器"的 ...
- C#的窗体防闪烁解决方案 - 开源研究系列文章
昨天编码的时候想到了关于无边框窗体的闪烁问题,主要是改变窗体大小的时候会闪烁,默认的窗体没这个问题.而现在无边框窗体的应用比较多,所以就找了度娘,然后结合自己的经验进行了测试,得到了这个例子,简单有效 ...