【安装配置】WSL虚拟机导出、导入镜像(涉及到docker无法在wsl下使用的问题)
背景WSL(Windows Subsystem Linux),是微软提供的在Windows下便携地使用Linux系统的方式,它支持使用虚拟化技术(也就是要在bios和控制面板中开启虚拟化支持),完美支持Ubuntu和Windows文件系统之间的使用。相比于VMware,速度更快。 本文主要介绍将已有的wsl环境导出为.tar格式的镜像文件,然后通过U盘或者网盘将tar文件发给另一台电脑,在另一台电脑上只需要导入tar包,无需重新安装和配置环境,就可以无缝衔接工作。(主要是我们组没服务器 ) DOS脚本在已有wsl的主机上打开windows cmd命令行, 12wsl --export Ubuntu-22.04 file_path# 导出wsl tar镜像 例如我这里filepath写的是D:\chisel_env\wsl_pkg\Ubuntu2204.tar 导出完成如图所示: 在要安装wsl的主机上打开windows cmd命令行, 设置wsl默认是版本2,否则导入后是版本1。由于wsl1没有彻底的虚拟化,无法使用docker命令 1wsl --set-d...
【IC设计】牛客网-序列检测习题总结
状态机基础知识 VL25 输入序列连续的序列检测1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859`timescale 1ns/1nsmodule sequence_detect( input clk, input rst_n, input a, output reg match ); //这题就是普通的状态机,需要注意的是: // @当输入不能跳转到下一个状态时,可以复用前面的序列 // @这题是的Moore状态机,输出只和当前状态有关 //定义状态空间(状态参数、状态寄存器) parameter IDLE = 0 ; parameter S0 = 1 ; parameter S1 = 2 ; parameter S2 = 3 ; parameter S3 = 4 ; parameter S4 = 5 ; parameter S...
【IC设计】同步FIFO设计(Verilog源码、参数化设计、面试必备)
设计思想FIFO也就是先进先出的队列,是一种特殊的RAM,特殊在读写地址默认是自增1,所以FIFO内部管理读写地址,不需要暴露读写地址端口。同步FIFO指读写使用同一个时钟,异步FIFO则读写使用不同的时钟,同步FIFO相对简单一些,异步FIFO还涉及到亚稳态、格雷码和二进制的转化等问题。 FIFO的难点在于空满的判断,这里同步FIFO的空满判断有两种方式,一是使用计数器,这个很简单,fifo_cnt等于0就为空,等于深度就满,二是使用读写指针进行判断,这里我使用第一种方式。 下面给出了经典同步fifo设计的源码,用来面试手撕,采用了参数化、$clog2函数,代码很规范也很好记。总结一下博客,重点强调下记忆的方法,方便面试手撕代码,如有错误的地方恳请指正! 端口分三方面记忆,时钟复位+读+写。注意读写不光有数据,还有使能和空满信号。 代码块一共可以分为六个代码块: 读数据部分有读指针always块、读操作always块; 写数据部分有写指针always块、写操作always块; 空满判断部分有fifo元素数量always块、空满判断assign块; 寄存器包括: fifo_...
【IC设计】数字IC_FPGA秋招手撕代码总结
总结下秋招需要学习的手撕代码题,还有很多不足之处陆续补充! FIFO【IC设计】同步FIFO设计(Verilog源码、参数化设计、面试必备) 分频【IC设计】任意倍数占空比为50%的奇数分频和偶数分频(Verilog源码、仿真波形、讲解) 边沿检测【IC设计】边沿检测电路(上升沿、下降沿、双沿,附带源代码和仿真波形) 锁存器【IC设计】简要介绍锁存器原理与Verilog实践 状态机【IC设计】牛客网-序列检测习题总结
【IC设计】任意倍数占空比为50%的奇数分频和偶数分频(Verilog源码、仿真波形、讲解)
任意倍数占空比为50%的偶数分频以四分频为例,分频后的一个周期是分频前的四个周期,并且分频后的一个周期中,一半是高电平,一半是低电平,这就是占空比为50%的四分频。要实现该功能,使用一个计数器在0~3之间计数,clk_out在0和2时翻转即可。 12345678910111213141516171819202122232425262728293031323334353637383940module even_divider#( parameter DIVIDE_FACTOR = 4 )( input clk_in , input rst_n , output reg clk_out); parameter CNT_WIDTH = $clog2(DIVIDE_FACTOR) ; reg [CNT_WIDTH : 0] cnt ; // 1.计数器 always@(posedge clk_in or negedge rst_n) begin if( ~rst_n ) be...
【IC设计】Xilinx不同系列的Zynq板卡介绍(Zynq-7000,UltraScale MPSoC_RFSoC,ACAP)
Xilinx Zynq SoC 系列针对不同的应用领域,Xilinx 公司设计开发了各种逻辑资源规模和集成各种外设功能的 Zynq SOC 器件,包括专为成本优化的 Zynq-7000 平台,面向高性能实时计算应用领域的 Zynq UltraScale+ MPSoC,面向射频通信的 Zynq UltraScale+ RFSoC,以及具备高度可扩展特性的自适应加速平台 ACAP。 专为成本优化的 Zynq-7000 平台Zynq-7000 SoC 属于成本优化的可扩展 SoC 平台,该系列器件集成了单核或双核的 Arm Cortex-A9,28nm 7 系列可编程逻辑,以及速率高达 12.5G 的收发器。Zynq-7000 SoC 非常适合以下应用领域:ADAS医疗内窥镜小型蜂窝基带专业相机机器视觉电信级以太网回传多功能打印机 面向高性能实时计算应用领域的 Zynq UltraScale+ MPSoCZynq UltraScale+ MPSoC 器件不仅提供 64 位可扩展性处理器,同时还将实时控制与软硬件引擎相结合,支持图形、视频、波形与数据包处理。置于包含通用实时...
【IC设计】简要介绍锁存器原理与Verilog实践
锁存器原理 当控制信号 C=0 时,Q维持不变根据与非门的逻辑定律,无论 D 输入什么信号,RD 和 SD 信号同时为 1。根据由与非门组成的 RS 锁存器的逻辑定律,RD 和 SD 都同时 等于 1 的话,锁存器的输出端 Q 将维持原状态不变。 当控制信号 C=1 时,Q由D来决定 如果此时 D=0,SD 就等于1,RD 就等于 0,根据 RS 锁存器的逻辑规律,电路的结果就为 0 状态; 如果 D =1,那么 RD 就等于 1,SD 也就等于 0,锁存器的结果就为 1 状态。也就是说,此时锁存器的状态是由激励输入端 D 来确定的,并且 D 等于什么,锁存器的状态就是什么,这就是我们前面所说的,将单路数据 D 存入到锁存器之中。 在绝大多数设计中我们要避免产生锁存器。它会让您设计的时序出问题,并且它的隐蔽性很强,新人很难查出问题。锁存器最大的危害在于不能过滤毛刺和影响工具进行时序分析。这对于下一级电路是极其危险的。所以,只要能用触发器的地方,就不用锁存器。 if语句if语句不带else123456789101112131415...
【IC设计】边沿检测电路(上升沿、下降沿、双沿,附带源代码和仿真波形)
边沿检测电路的概念边沿检测指的是检测一个信号的上升沿或者下降沿,如果发现了信号的上升沿或下降沿,则给出一个信号指示出来。边沿检测电路根据检测边沿的类型一般分为上升沿检测电路、下降沿检测电路和双沿检测电路。 上升沿检测电路 如图所示,我们的目标是当检测到a从0变成1时,令a_posedge为高电平,其余情况a_posedge均为低电平。要检测a从0变成1,也就是说a的上升沿前是低电平,上升沿后是高电平,那么只需要令边沿前取反,再和边沿后相与,如果结果为1,说明必然是边沿前为0,边沿后为1,确认是上升沿。实际操作中是让a打一拍并取反,再和a相与,得到a_posedge。 下降沿检测电路 下降沿同理,边沿后取反再和边沿前相与,得到1,说明是下降沿。 边沿前电平可以通过a打一拍得到。 双边沿检测电路 方法一:前面会了上升沿和下降沿检测,双边沿检测也就是上升沿和下降沿都拉高,只需要将前面两者的结果进行或运算即可。 方法二:更为简便的办法是,上升沿和下降沿都是0和1之间的跳变,使用异或运算符,可以直接得到结果。 代码和仿真RTL代码12345678910111213141516171...
【IC设计】奇数分频与偶数分频 电路设计(含讲解、RTL代码、Testbench代码)
原理分析分频电路是将给定clk时钟信号频率降低为div_clk的电路,假设原时钟的频率为M Hz,分频后的时钟为N Hz,那么就称该分频电路为M/N分频。 如果M/N是奇数,实现该功能的电路就是奇数分频电路;如果M/N是偶数,实现该功能的电路就是偶数分频电路。 频率和周期的对应关系:由于频率f=1/T,因此二分频电路即M/N=(1/T1)/(1/T2) = T2/T1 = 2 ,即一个二分频后的时钟周期是原时钟周期的两倍。同理,一个N分频后的时钟周期是原时钟的M/N倍。 偶数分频举例:以两分频电路为例,由于周期为原先的两倍,那么只需要在clk每个上升沿到来时,div_clk翻转,就可以了。以四分频电路为例,由于周期为原先的四倍,那么需要在clk每两个周期div_clk翻转一次。需要使用计数器来数clk过了几个周期。同理,一个K分频电路,K为偶数,那么由于周期为原先的K倍,那么需要在clk每K/2个周期div_clk翻转一次。 奇数分...
【IC设计】草履虫都能看懂的AXI入门博客(大量图文来袭,手把手教学,波形仿真)
AXI:Advanced eXtensible Interface 高级可扩展接口AXI是AMBA总线协议的一种,AMBA是ARM公司1996年首次推出的微控制器总线协议。 概述AXI的三类接口通常所说的AXI指AXI4,有三类接口: AXI4-Full:用于高性能内存映射需求。 AXI4-Lite:用于简单的地吞吐量内存映射通信(例如,进出控制寄存器和状态寄存器) AXI4-Stream:用于高速流数据 从Spartan-6和Virtex-6器件开始,Xilinx的IP开始采用AXI接口。后续的UltraScale架构、Zynq-7000系列全部使用AXI总线。AXI总线在Xilinx产品中被广泛采用,主要是高效、灵活、便捷。 AXI的特点高效:通过对AXI接口进行标准化,开发人员只需学习用于IP的单一协议。 灵活:AXI4适用于内存映射接口,仅一个地址阶段就允许高达256个数据传输周期的高吞吐量爆发。AXI4-Lite是一个轻量级的传输接口,逻辑占用很小,在设计和使用上都是一个简单的接口。AXI4-Stream完全取消了对地址阶段的要求,并允许无限的数据突发大小。 便...
【程序人生】研二下学期快结束了~~~~随便写写
天啦撸,时间过得好快,2022年3月被录取,9月入学,在上海上课一年,23年7月底来北京,现在已经24年4月了。再过2个月,研二就算结束了。 研一在上海的一年是很精彩快乐的,上科大的课程常常上的力不从心,都是英文书籍,英文PPT,英文Homework,英文lab,然后老师多数也是只会科研,不擅长讲的好懂。当时让我感觉最有收获的是【VLSI设计】,虽然老师讲的也不咋地,但是课程Lab会带你从写Verilog到用一下VCS、Verdi、Formality、ICC工具,让我对数字芯片设计的全流程有了一个比较全面的认知。 研一的反思现在想想,那会时间过得很快,研一下来,收获其实不是很大。现在想想其实有几个原因: 本硕方向不匹配我本科学的是计算机科学与技术,代表课程是面向对象编程、计算机组成原理、数据结构与算法、计算机网络、操作系统等研究生的方向是通信芯片,其中通信的知识属于信息与通信工程一级学科,代表课程是通信原理、信号与系统、数字信号处理等,而芯片的知识属于电子科学与技术,代表课程是半导体物理、电路与逻辑设计、电磁场与电磁波、数字集成电路等通信芯片从物理上属于电子科学,从架构上属于计...
【IC设计】Verilog线性序列机点灯案例(四)(小梅哥课程)
声明:案例和代码来自小梅哥课程,本人仅对知识点做做笔记,如有学习需要请支持官方正版。 该系列目录:Verilog线性序列机点灯案例(一)Verilog线性序列机点灯案例(二)Verilog线性序列机点灯案例(三)Verilog线性序列机点灯案例(四) 设计环境Vivado2018.3 软件Zynq-7000 xc7z010clg400-1 板卡 设计目标在案例(三)中提到让一个led根据8个拨码开关的值来循环变化,每个拨码开关负责0.25秒,一共是2秒。在任务(四)中我们需要在每次动态变化前加入1秒的空闲时间(空闲时间led是熄灭的) 设计思路1秒的空闲时间需要一个计数器来计算,假设为counter02秒的动态变化可以像案例(二)中一样用两个计数器来完成,假设为counter1和counter2counter1用来计数0.25秒,counter2在counter1每次计满时加1,最后将sw[counter2]输出给led。需要注意的是,动态变化是从1秒空闲时间后开始的,所以counter1和counter2必须在counter0计满以后才能开始工作。在动态变化完成后,即co...
【IC设计】Verilog线性序列机点灯案例(二)(小梅哥课程)
案例和代码来自小梅哥课程,本人仅对知识点做做笔记,如有学习需要请支持官方正版。 该系列目录:Verilog线性序列机点灯案例(一)Verilog线性序列机点灯案例(二)Verilog线性序列机点灯案例(三)Verilog线性序列机点灯案例(四) 设计目标我们的FPGA的时钟频率为50MHz,即每个周期20ns。因此,在该时钟下时间和周期数的对应关系为: 持续时间 对应周期数 0.25s 12,500,000 cycles 0.5s 25,000,000 cycles 0.75s 37,500,000 cycles 1s 50,000,000 cycles 我们的目标是让LED以**【亮0.25秒->灭0.5秒->亮0.75秒->灭1秒】**的规律,持续循环闪烁。 设计思路 为了完成这样的规律性闪烁,需要一个计数器,计数满2.5秒归零,即:当上升沿采样到125,000,000-1时,计数器归零。然后,led灯根据当前计数器的数值,设置led的亮灭,图中已经标注了led跳变时的counter数值。下面直接上代码 RTL 及 Testb...
【IC设计】Verilog线性序列机点灯案例(一)(小梅哥课程)
案例和代码来自小梅哥课程,本人仅对知识点做做笔记,如有学习需要请支持官方正版。 该系列目录:Verilog线性序列机点灯案例(一)Verilog线性序列机点灯案例(二)Verilog线性序列机点灯案例(三)Verilog线性序列机点灯案例(四) 设计目标让主频50MHz的FPGA每0.25s亮,0.75s灭,如图所示:可以看到其中1s对应50,000,000个周期,即50MHz,每个周期20ns50MHz时钟下度过的周期和时间对应关系如下: 周期数量 对应时间 12,500,000 0.25秒 50,000,000 1秒 37,500,000 0.75秒 思路由于需要计数到50,000,000-1,那么我们计数器的位宽可以设置为26位,2^26=67,108,864,足够计数到50,000,000-1。 1reg [25:0] count; 我们的核心目标其实是让led亮12,500,000个周期,然后灭37,500,000个周期,如此反复。想象下现实中的秒表,从0开始计时,到59,再变为0,刚好是60秒,同理,我们的计数器也是从0开始计数...
【异常处理】Verilator报错Verilator requires a C++14 or newer compiler
riscv-mini是UC Berkeley用Chisel编写的三级流水线RISC-V处理器,它实现了RV32I的用户级2.0版本ISA和机器级1.7版本ISA,是Berkeley著名的Rocket-chip项目的简化版 环境版本: Verilator 5.022Ubuntu 22.04.3gcc version 11.4.0 报错信息在对risc-mini项目使用make verilator命令时出现 Verilator requires a C++14 or newer compiler 解决办法解决办法是将项目目录下Makefile中的 CXXFLAG后面的 -std=c++11改成-std=c++14即可