自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (1)
  • 收藏
  • 关注

原创 数字IC之静态时序分析

1.时序路径与分析方法2.寄存器级时序分析3.建立时间与保持时间4.异步信号的时序同步化5.时序违例的修改

2020-07-22 15:51:05 2216

原创 ASIC综合概述

1.综合过程综合(Synthesis)=转换(translation)+映射(mapping)+优化(optimization)转换:将RTL电路转换为与工艺无关的逻辑门,例如布尔逻辑,与或非门;映射:将转换后的门电路映射到特定工艺库上,例如TSMC48nm工艺;优化:添加时序、面积、功耗等方面约束,生成理想中的电路。2.综合的不同层次(1)逻辑级设计实体以布尔逻辑(与或非等)、触发器、锁存器等元件例化实现。例如四位全加器,可以用RTL级描述,也可以使用门电路描述。(2)RTL级使用硬件描

2020-07-17 11:03:22 2356

原创 原码、反码与补码的理解

1.基本概念正整数的原码、补码、反码都是它本身;负数的反码:从原码变形,符号位保持不变,其他位翻转;负数的补码:反码+1运算方法:将两位操作数都转化为补码,对补码进行运算,并将运算结果进行补码转原码2.运算原理:首先将减法转化为加法,可以使用取余的方式,即mod运算。其原理类似于钟表调时间,可以正拨,可以反拨。在二进制中表现为取反,如-1=126 mod 127-1=1000,0001126=1111,1110可以看出,对1000,0001进行翻转,即可得到1111,1110,这里表明了

2020-07-14 17:40:52 700

原创 SOC系统01:软核的获取与仿真

0.前言一个SOC系统如下图所示。以软核为中心的soc系统搭建,需要完成软核仿真、FPGA上板验证、外设IP开发、外设挂载与驱动、软硬交互等步骤。这是一个很大的主题,准备用一系列的主题小结记录一点经验。1.开源核获取例如ARM架构下的m系列,a系列,可以到官网申请design start版本、eval版本;或者比较热门的RISC-V架构,如蜂鸟,无剑等软核,可以在github中直接下载2.仿真平台的搭建常用的仿真软件,Windows下常用modelsim,Linux下常用questasim,v

2020-07-05 23:19:20 913

原创 SystemVerilog语法基础

0.前言相较于verilog,system verilog在验证方面应用更广泛,当下最常用的uvm就是基于sv实现的。sv在verilog的基础上借鉴了一些高级语言的语法,它拥有以下功能:.设计+验证.产生随机约束.功能覆盖率统计分析.断言(SVA).面向对象的验证这一篇学习笔记用于记录常用的变量类型、过程语句,以便于后续再深入补充。1.数据类型(1)两态数据类型:0、1;sv的数据类型在verilog的基础上,借鉴了C/C++的语法变量类型位宽符号位状态数备注

2020-07-04 15:50:00 3209

原创 HLS基础:从C语言到RTL的实现

0.前言HLS相对于传统的硬件描述语言而言,有着独特的优势。HLS全称是High Level Synthesis,即高层次综合,基于C/C++的开发流程,可以极大地缩短IP开发周期。总的来说,这是一门人工引导加以优化的编程语言,可以方便地切数组、切流水,提高数据吞吐率与并发度,从而达到时间与空间、速度与面积的trade off。1.基础元素到硬件资源的映射基础元素硬件资源备注主函数名顶层模块名唯一的,且需要额外声明顶层子函数名子模块调用顶层参数封装IO

2020-07-03 23:52:08 5053

原创 实验二:四位全加器的验证平台搭建

1.验证平台结构2.各功能模块实现3.makefile脚本集成4.验证结果展示1.验证平台结构如下图所示,一个完整的验证平台包括以下几个模块:激励(driver)、待测模块(dut)、监视器(monitor)、参考模型(refm)、比分板(scb)。本次实验基于四位全加器的前端RTL设计进行验证,具体实现见实验一。验证平台的结构分为rtl、sim、tb三个目录,具体见验证概述,在脚本集成时需要注意目录结构。2.各功能模块实现(1)tb_top.v`timescale 1ns/1ps.

2020-07-03 20:50:22 953

原创 异步FIFO学习笔记

一、前言异步,是指读写时钟频率不同,因此可以用来做跨时钟域处理。跨时钟域处理,单比特的数据一般采用两级寄存器缓存的方式(适用于由慢到快),多比特则采用异步FIFO、异步双口RAM处理。二、原理解析1.空满信号的产生空信号:读地址赶上写地址时产生空信号,因此同步写地址可以小于等于真实写地址,于是将写地址同步到读时钟域进行比较,产生真空或者虚空信号;满信号:写地址赶上读地址时产生满信号,因此同步读地址可以小于等于真实读地址,于是将读地址同步到写时钟域进行比较,产生真满或者虚满信号;2.格雷码的引入

2020-07-03 00:20:23 1151

原创 ASIC验证概述

0.前言1.验证流程(flow)2.验证平台的组成3.验证方法之黑白灰盒4.通用型目录结构0.前言一个ASIC完整的设计流程如下图,包括需求-架构-RTL 设计-验证-综合-STA-DFT-物理验证。其中,验证处于IC设计前端,主要用于验证RTL代码的功能是否正确完备。1.验证流程(flow)(1)制定验证策略和计划(2)确定验证平台确定验证语言:基于Verilog/systemVerilog确定验证层次:高级语言C/C++/Matlab等确认验证方法学:ERM/OVM/VM.

2020-07-03 00:14:22 2042

原创 实验一:四位全加器的RTL设计

0.前言为了熟悉整个数字IC设计流程,以知识点+实验的方式记录。四位全加器的写法有很多种,按照FPGA的设计方法,可以直接调用一个四位的加法器;但数字IC基于标准cell的设计,为了速度与面积的trade off,以及后端布线方便,本实验采用模块调用的写法。1.设计代码module adder_4bits(input [3:0] num1,input [3:0] num2,output cout,output [3:0] sum);wire cout_0;wire cout_1

2020-07-01 22:09:14 1199

原创 FPGA内部资源

0.前言目前主流的FPGA仍是基于查找表技术的,已经远远超出了先前版本的基本性能,并且整合了常用功能(如RAM、时钟管理和DSP)的硬核(ASIC型)模块。如图1-1所示(注:图1-1只是一个示意图,实际上每一个系列的FPGA都有其相应的内部结构),FPGA芯片主要由6部分完成,分别为:可编程输入输出单元、基本可编程逻辑单元、完整的时钟管理、嵌入块式RAM、丰富的布线资源、内嵌的底层功能单元和内嵌专用硬件模块。1. 可编程输入输出单元(IOB)可编程输入/ 输出单元简称I/O 单元,是芯片与外界电路

2020-06-27 11:01:26 549

原创 蜂鸟e203的仿真

一.在Linux系统下,使用VCS仿真1.添加RTL文件与tb文件2.准备软核测试程序:gpio4sim.verilog注: (1)coremark4sim,dhrystone4sim也可(2)这是测试平台,测试指令的方法类似3.vcs编译波形+dve显示波形4.仿真成功结果如下5.将以上需要的命令写成makefile以便下次调用POS = ${PWD}vcs: vcs...

2020-06-23 15:55:33 2125 3

原创 优化重复调用的代码以提高运行效率

0.前言通常影响程序运行速度的地方,都是在执行次数最多的地方。下面介绍一些常用的技巧。1.尽量使用整数,少用浮点数整数运算比浮点数快得多,而在绘图程序中用到小数点的机会实在少之又少,所以这是很容易做到的技巧。2.避免乘法与除法乘法与除法都是相当浪费CPU运算时间的一种运算,所以在绘图程序中应尽量避免,在无法避免时,如果乘除的数目为2次方,例如2、4、8、16等,则可改用左移或右移来取代:a2^n–>a<<n 例:a16–>a<<4a/2^n–>a&gt

2020-06-22 17:07:24 538

原创 提高C/C++程序运行效率的10个简单方法(转)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/ljianhui/article/details/9212817————————————————0.前言对于每一个程序员来说,程序的运行效率都是一个值得重视,并为之付出努力的问题。但是程序性能的优化也是一门复杂的学问,需要很多的知识,然而并不是每个程序员都具备这样的知识,而且论述如何优化程序提高程序运行效率的书籍也很少。但是这并不等于我们可以忽

2020-06-22 16:53:56 979

原创 二进制码、格雷码与独热码

1.介绍在Verilog中最常用的编码方式有二进制编码(Binary)、格雷码(Gray-code)编码、独热码(One-hot)编码。2.优缺点(1)格雷编码相邻状态转换时只有一个状态位发生翻转,这样能.消除状态转换时由多条状态信号线的传输延迟所造成的毛刺;.减少充放电次数,从而降低功耗。(2)独热编码即 One-Hot编码,又称一位有效编码,在状态机中很常见。其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。.资源消耗量大

2020-06-22 11:55:53 2881

原创 阻塞赋值与非阻塞赋值的RTL模型

1.非阻塞赋值:并行的当两个信号有依赖关系时,如地址与数据always @(posedge clk) begin b <= a; c <= b;endendmodulealways @(posedge clk) begin b = a; c = b; end

2020-06-03 23:50:30 251

原创 modelsim与quartus仿真的区别

1.器件延迟modelsim没有明显的器件延迟,而quartus器件延迟明显2.信号采样点当信号在时钟沿发生变化时,modelsim采样时钟沿之后的信号,quartus采样时钟沿之前的信号。

2020-06-03 23:04:50 3142

原创 用LUT换DSP示例

1.使用两个乘法器always@(*)begin if(cmd==1'b0)begin sum <= add0+add1; end else begin sum <= add2+add3; endend2.使用LUT共享乘法器资源always@(*)begin if(cmd==1’b0)begin ch1 <= add0; end else begin ch1 <= add2; end if(cmd==1’b0)begin ch2 &

2020-05-09 15:47:37 951 1

原创 if-else RTL模型归纳

目录一、基本RTL模型1.if的模型2.if-else if的模型3.else 的模型二、避免产生锁存-latch1.latch的产生2.消除latch三、避免综合过度优化1.过度优化的产生2.避免过度优化的方法一、基本RTL模型1.if的模型always@(*)begin if(cmd==2'b10)begin done <= 2'b10 endendRTL模型为一个比较器2.if-else if的模型always@(*)begin if(cmd=.

2020-05-09 15:20:42 1195

原创 multiboot之ICAP

目录0.前言1.ICAP的例化2.ICAP指令实现3.比特位交换4.跳转与fallback约束5.生成mcs镜像6.测试demo0.前言multiboot作为更新程序的一种方法,在FPGA的实现方法是将两个bit文件合成为一个mcs镜像。但是,flash默认只读取第一个从0开始的bit。要跳转到第二个bit文件时,可以用icap控制。1.ICAP的例化(1)使用原语...

2020-04-25 00:47:16 4560 15

原创 用模块调用的方法例化寄存器

//例化方法sirv_gnrl_dfflr #(`E203_PC_SIZE) pc_dfflr (pc_ena, pc_nxt, pc_r, clk, rst_n);//module实体module sirv_gnrl_dfflr # ( parameter DW = 32) ( input lden, input [DW-1:0] ...

2020-04-22 11:40:35 991

原创 调用FPGA内部乘法器

1.当两个变量相乘2.变量与常数相乘3.要求乘法器/加法器不使用DSP block实现在synplify pro中有一个编译指令syn_multstyle,可以实现这个功能,参见synplify pro帮助文件中的说明:syn_multstyle Attribute Attribute; Lattice (LatticeECP2S/ECP2M/ECP2, LatticeECP/EC,...

2020-04-22 00:24:02 1611

原创 存储器模型

以32x256大小的交织器(按行写,按列读)为例描述存储器的基本模型、读写时序、读写技巧1.语法定义:parameter ROM_DEPTH;parameter ROM_WIDTH;reg [8:0] Line;reg [8:0] Column;reg [ROM_WIDTH-1:0] memory [ROM_DEPTH-1:0];有点类似于C...

2020-04-13 22:40:17 1142

原创 for循环的硬件电路转化

以按行写按列读的交织器为例://按C语言写法always@(posedge clk or negedge rstn)begin if(!rstn) begin rdata<=0; end else if (!w_r)begin//写入 for (Line=0;Line<=ROM_DEPTH;Line=Line+1) for(Column=0;Column<...

2020-04-13 21:53:22 604

原创 System verilog:测试模块的“.”连线能否传递信号

在处理器之类的大型工程中,常会出现类似于结构体的连接,例如`define CPU_TOP u_e203_soc_top.u_e203_subsys_top.u_e203_subsys_main.u_e203_cpu_top`define EXU `CPU_TOP.u_e203_cpu.u_e203_core.u_e203_exu`define E203_PC_SIZE 32 wire ...

2020-03-30 00:57:33 490

原创 Makefile书写笔记

重复性的命令行用Makefile脚本记录,使用时输入make+定义。//示例POS = ${PWD}vcs: vcs e203_sim/rtl/* -full64 -sverilog -debug_pp +vcd +vcdpluson cp pro_test/demo_gpio4sim.verilog ${POS}sim: ./simvvpd: dve -vpd vcdplu...

2020-03-30 00:31:15 310

原创 vivado封装与调用IP笔记

1.关于IP封装不能直接在Tools-Creat and Package 中包装文件夹,否则在IP Catalog会显示helper core不能例化解决:先把RTL文件引入到工程中,选择在当前文件工程中封装IP,这样封装出来的IP是可以调用的。IP设置中选择了Archive选项还会产生一个压缩包,里面主要包含顶层.v,.xci,.xml文件,便于其他使用者的调用2.关于IP的调用在一个...

2020-03-30 00:01:49 911

原创 assign的选择用法示例

1.有优先级的assign out2 = sel1?in1[3:0]: sel2?in2[3:0]: sel3?in3[3:0]: 4'b0; 2.并行选择的assign out1=({4{sel1}} & in1[3:0]) | ({4{sel2}} & in2[3:0]) |({4{sel3}} &...

2020-03-15 16:50:11 5830 2

原创 FPGA内部查找表(LUT)模块分析

FPGA以SLICE为单位实现组合逻辑,外围加Block、Multiplier,以及IOB实现外设通信。其中,最重要的是SLICE种的LUT4(Look-Up-Table)。每一个LUT4为4输入1输出的选择电路,4输入有16种情况。以如下代码为例module inner_LUT(input clk,input a,input b,input c,input ...

2020-03-15 16:47:15 1479

原创 uart通信例程分析

主题包含三个模块uart_top.c,test_uart.c,uart_trans.cmodule uart_top( clk, rst, txd ); input clk, rst;output txd;wire clk_i; clock cloc...

2020-03-12 23:52:47 352

原创 PS-PL通信:Zynq硬核通过AXI-Lite写寄存器

(1)block design,PL:program logicPS:processing system

2020-03-12 23:08:26 3668

原创 AXI总线时序基本分析

1.握手协议简介(1)主要信号包括Address、data、control information,响应信号VALID/READY信号匹配(即两信号同时有效)来完成握手操作。2.信道总线分类(1)写地址信道(Write address channel)(2)写数据信道(Write data channel)(3)写响应信道(Write response channel)(4)读地址信道...

2020-03-10 21:24:44 1069

原创 Vivado之block design与在线逻辑分析仪

以数字处理信号中的FIR滤波器为例完成block design并用在线逻辑分析仪观察输出。(1)放置所需IP块。选择右侧block design,右键Add IP,选择产生三角波的DDS,乘法器Multilayer,滤波器FIR(配置滤波系数可用matlab、Filter Solutions工具),时钟clocking compiler(2)配置物理信息。可用两个信号发生器产生1M和100MH...

2020-03-10 00:01:27 1819 2

原创 vivado的RTL设计与联合modelsim仿真

以信号发生器为例,读取ROM中数据,并输出形成正弦波

2020-03-09 12:06:59 1262

原创 e200_SDK开发环境分析

e200的SDK平台主要是由Makefile脚本、板级支持包(BSP)、链接脚本和软件示例组成的开发环境。BSP主要目录内容为:(1)bsp/hbirds-e200/drivers,存放驱动程序代码,包括hclkgen(High-Speed Clock Generation),PLIC(Platform-Level Interrupt Controller),关于PLIC可参考https://...

2020-03-08 15:21:43 242

原创 e200_SDK板级支持包解析:C运行库Newlib

Newlib是常用的嵌入式C运行库,在bsp/hbird-e200/stubs目录下移植Newlib所需要的桩函数(即调用的底层功能函数),如read,write,malloc等以write函数为例:/* See LICENSE of license details. */#include <stdint.h>#include <errno.h>#include...

2020-03-08 14:35:31 232

原创 信号传输:为什么用差分信号

在PC机连接到开发板RJ45接口时使用的网线是双绞线,中间传输的信号形式为差分信号。差分信号在模拟电路的差分放大器中有涉及,简单来说,一对差分信号表示与基准电压的偏差,例如1.01V与0.99V可以表示成1±0.01V,1V则为基准电压,0.01V则为差分电压,形象地说就像跷跷板的两端。同样地,输出电压为0-5V信号,以2.5V为基准,0V或5V为振幅,处理信号时可以将2.5V看作虚地,则输入...

2020-03-07 11:34:25 1426

原创 inout端口示例

要实现输入输出的管脚复用,在RTL Viewer中产生下图中红色加粗的器件,Verilog怎么描述呢?其示例代码如下:module bidirec (oe, clk, inp, outp, bidir);// Port Declarationinput oe;input clk;input [7:0] inp;output [7:0] outp;inout ...

2020-03-06 23:30:20 1116

原创 代码如何控制硬件

自己的一点浅薄理解,是否准确还待验证。硬件,例如芯片,只能识别0和1,而软件正是通过控制寄存器0和1的值来完成逻辑例如实现c=3+2,二进制对应为11+10,就要有一个存放a的寄存器和b的寄存器,连接到一个加法器上,结果存放于寄存器c。编译成底层汇编语言后,将.h文件烧制到芯片中,这个.h文件是比特流,可以给寄存器赋值高低电平,从而完成a=11;b=10;电平稳定后可以在寄存器c中读取到结...

2020-03-06 23:22:09 647

原创 Linux ping命令的使用

-d:使用Socket的SO_DEBUG功能;-c<完成次数>:设置完成要求回应的次数;-f:极限检测;-i<间隔秒数>:指定收发信息的间隔时间;-I<网络界面>:使用指定的网络界面送出数据包;-l<前置载入>:设置在送出要求信息之前,先行发出的数据包;-n:只输出数值;-p<范本样式>:设置填满数据包的范本样式;-q:不...

2020-03-05 20:24:28 396

03.ZYNQ SOC修炼秘籍1200页.pdf

zynq修炼秘籍,有详细的教程,目前最齐全的版本。 本手册版权归南京米联电子科技有限公司所有,并保留一切权利,未经 我司书面授权,擅自摘录或者修改本手册部分或者全部内容,我司有权追 究其法律责任。

2020-06-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除