笔记——尤老师讲笔试

2023-11-09

1.Function内部不能使用时间延迟,也不能使用@这种事件触发,只能实现一些组合逻辑运算,也不能调用task。

task可以有时间延迟,function不可以用时间延迟。

Verilog 中的 task 是一种不可综合的语法,它既提供了从不同位置执行公共过程的能力(因为这样可以实现代码共享),也提供了把大过程切分成小过程的能力(因为小过程更便于阅读和调试)。相较于 function, task 的 input 和 output 是可选项,同时其中也可以包含延迟控制语句,常被用在 testbench 中。

2.以下不是串行总线的是:

A、SDIO
B、SPI
C、IIS
D、AHB

SDIO用于SD卡接口传输总线,CMD、4bitdata clk串行的;
SPI用于adc、dac读出写入接口或者一些芯片控制寄存器接口,或者SPI flash分为3线制和4线制,sdi sdo cs clk

IIS用于传输音频,比如一些音频DAC都是IIS接口用于适配各种采样率音频和左右声道数据。
AHB,ARM公司的AMBA总线的一部分主要CPU和外设DMA, 内存通信的总线,具 有32bit位宽,地址总线构成的,并行总线。

CRC校验

在这里插入图片描述
在这里插入图片描述

4、看图编程

在这里插入图片描述

`timescale 1ns/1ps

module shift_t(
	input	wire	clk,
	input	wire	rst_n,
	output	wire	pi
);
reg	[8:0]	shift_reg;
always @(posedge clk or negedge rst_n) begin
	if(!rst_n) begin
		shift_reg<=9'b11111_1111;
	end
	else begin
		shift_reg<={shift_reg[7:0],shift_reg[4]^shift_reg[8]};
	end
end

assign	pi=shift_reg[6];

endmodule

5、打两拍同步在这里插入图片描述

题目分析:
1.模块名称 rise_det
2.时钟上升沿触发
3.复位低有效并且异步复位
4.检测输入in data的上升沿,之后两周周期后拉高一个时钟周期

module rise_det(
	input	wire	clk,
	input	wire	rst_n,
	input	wire	in_data,
	output	wire	out_data
);
reg	indata_dly1,indata_dly2;
reg	out_det_reg;

always @(posedge clk or negedge rst_n)begin		//这是异步复位,仅有clk是同步复位
	if(!rst_n)begin
		indata_dly1<=1'b0;
		indata_dly2<=1'b0;
	end
	else begin
		indata_dly1<=in_data;
		indata_dly2<=indata_dly1;
	end
end

always @(posedge clk or negedge rst_n)begin		//这是异步复位,仅有clk是同步复位
	if(!rst_n)begin
		out_det_reg<=1'b0;
	end
	else if(indata_dly1==1'b1 && indata_dly2==1'b0) begin
		out_det_reg<=1'b1;
	end
	else begin
		out_det_reg<=1'b0;
	end
end

assign	out_data=out_det_reg;

endmodule
//测试文件
`timescale 1ns/1ns
module tb_rise_det();	//测试模块

parameter T=20;

reg		sys_clk;
reg		sys_rst_n;
reg	 	in_data;
wire	out_data;

always #(T/2) sys_clk=~sys_clk;

initial begin
	sys_clk=1'b0;
	sys_rst_n=1'b0;
	#(T+1)	
	sys_rst_n=1'b1;
end

initial begin
	in_data=0;
	#1000
	in_data=1;
	#100
	in_data=0;
	#1000
	in_data=1;
	#100
	in_data=0;
end

rise_det u_rise_det(
	.clk			(sys_clk),
	.rst_n		(sys_rst_n),
	.in_data		(in_data),
	.out_data	(out_data)
);

endmodule

6、异步FIFO在这里插入图片描述

在这里插入图片描述

module sfifo_16×16(
	input	wire			clk,
	input	wire			rst_n,
	input	wire			write,
	input	wire	[15:0]	data_in,
	input	wire			read,
	output	wire	[15:0]	data_out,
	output	wire			full,
	output	wire			empty
);

reg	[15:0]	BRAM_16×16[15:0];

reg	[4:0]	wraddr,rdaddr;
reg	[15:0]	tmp_rdata;

//写地址递增
always @(posedge clk)begin
	if(rst_n==1'b1)begin
		wraddr <= 1'b0;
	end
	else if (write==1'b1)begin
		wraddr <= wraddr + 1'b1;
	end
end

//读地址递增
always @(posedge clk)begin
	if(rst_n==1'b1)begin
		rdaddr <= 1'b0;
	end
	else if (read==1'b1)begin
		rdaddr <= rdaddr + 1'b1;
	end
end

//写数据
always @(posedge clk)begin
	if(write==1'b1)begin
		BRAM_16×16[wraddr] <= data_in;
	end
end

//1 clk latency
always @(posedge clk)begin
	tmp_rdata <= BRAM_16×16[rdaddr];
end

//读数据
assign	data_out <= tmp_rdata;

//判断读空、写满
assign	empty = (wraddr == rdaddr)?1'b1:1'b0;

assign	full = (~{wraddr[4],wraddr[3:0]} == rdaddr)?1'b1:1'b0;

endmodule

//测试文件

//测试文件
`timescale 1ns/1ns
module tb_sfifo_16×16();	//测试模块

reg clk;
reg write;
reg read;
reg rst;
reg [15:0]	data_in;
wire [15:0]	data_out;
wire full;
wire empty;

initial begin
	rst = 1;
	repeat(10)@(posedge clk);
	rst = 0;
	repeat(10)@(posedge clk);	
	drive_w();
	repeat(10)@(posedge clk);
	drive_r();	
end

task drive_w;
	begin
	integer it;
	for(it=0;it<16;it=it+1)begin
		write <= 1;
		data_in <= it[15:0];
		@(posedge clk);
	end
	write <= 1'b0;
	end
endtask

task drive_r;
	begin
	integer it;
	for(it=0;it<16;it=it+1)begin
		read <= 1;
		@(posedge clk);
	end
	read <= 1'b0;
	end
endtask

sfifo_16×16 u_sfifo_16×16(
	.clk		(clk),
	.rst_n		(rst),
	.write		(write),
	.data_in	(data_in),
	.read		(read),
	.data_out	(data_out),
	.full		(full),
	.empty      (empty)
);

endmodule

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

笔记——尤老师讲笔试 的相关文章

  • 使用 VHDL 实例化 FPGA 中的 RAM

    我试图按照中的指导实现双端口 RAM这篇优秀的博文 http danstrother com 2010 09 11 inferring rams in fpgas 然而 ModelSim 在编译时给出以下警告 Warning fifo ra
  • 使用forever和always语句

    以下两个代码都会生成一个时钟 我需要知道除了时钟生成之外 永远循环是否还有其他用途 我只在时钟一代中遇到过永远 如果只是为了这个目的 那岂不是毫无用处 initial begin clk 0 forever begin 5 clk clk
  • 如何生成异步复位verilog总是阻塞凿子

    Chisel 始终生成敏感度列表中仅包含时钟的块 always posedge clk begin end 是否可以将模块配置为使用异步重置并生成这样的始终块 always posedge clk or posedge reset begi
  • 修改后的 baugh-wooley 算法乘法 verilog 代码不能正确乘法

    以下 verilog 源代码和 或测试平台可以很好地工作商业模拟器 iverilog https www edaplayground com x 3TuQ也形式化验证工具 yosys smtbmc https gist github com
  • 「HDLBits题解」Gates4

    本专栏的目的是分享可以通过HDLBits仿真的Verilog代码 以提供参考 各位可同时参考我的代码和官方题解代码 或许会有所收益 题目链接 Gates4 HDLBits module top module input 3 0 in out
  • UIO 设备上的 mmap EINVAL 错误

    在尝试使用 UIO 而不是直接映射后 我在 Xilinx Zynq 上映射物理内存时遇到问题 dev mem 虽然计划是以普通用户身份运行应用程序 而不是root这仍在运行root 显然 第一个映射成功 其余映射到同一个文件描述符12 de
  • Verilog 错误:必须连接到结构网络表达式

    我收到错误 output or inout port Qout must be connected to a structural net expression 我评论了下面代码中发生错误的行 代码被修剪 压缩 我搜索了答案 似乎我无法将输
  • 在verilog中将wire值转换为整数

    我想将电线中的数据转换为整数 例如 wire 2 0 w 3 b101 我想要一个将其转换为 5 并将其存储在整数中的方法 我怎样才能以比这更好的方式做到这一点 j 1 for i 0 i lt 2 i i 1 begin a a w i
  • if 语句导致 Verilog 中的锁存推断?

    我正在编写用于合成算法的 Verilog 代码 我对哪些情况可能导致推断锁存器有点困惑 下面是这样的一段代码 虽然它在模拟中工作得很好 但我担心它可能会导致硬件问题 always b1 or b2 b1 map b2 map m1 map
  • Verilog 中的“net”代表什么?

    我刚刚开始学习Verilog 据我了解 Verilog有net数据类型 什么是net代表 网络就是这样一种数据类型 您不使用它来存储值 它们代表物理连接 您可以将线路视为一种网络数据类型 你可以去网上看看更多here http www ee
  • 对象 <名称> 未声明

    这是我的代码 据我所知 LEDs被定义为 module sevenseg LEDs in output reg 6 0 LEDs input 3 0 in always in begin case in 0 LEDs 7 b1000000
  • 开始后跟冒号和变量是什么意思?

    什么是data mux意思是这里 它只是块的名称吗 if PORT CONFIG 32 P0 1 b1 begin data mux end 这些是块名称 它们特别适用于generate块 例如 您可以定义一个generate块如 genv
  • 如何从 Spartan 6 写入 Nexys 3 FPGA 板上的 Micron 外部蜂窝 RAM?

    我到处都查过了 数据表 Xilinx 网站 digilent 等等 但什么也没找到 我能够使用 Adept 工具来验证我的蜂窝 RAM 是否正常运行 但我找不到任何库存 VHDL 代码作为控制器来写入数据和从中读取数据 帮助 找到了此链接
  • Verilog 中的 If 语句和分配连线

    我试图弄清楚基于组合逻辑分配电线的基础知识 I have wire val wire x wire a wire b always begin if val 00 I want to assign x a if val 01 I want
  • Verilog 中的大括号是什么意思?

    我很难理解 Verilog 中的以下语法 input 15 0 a 16 bit input output 31 0 result 32 bit output assign result 16 a 15 a 15 0 我知道assign语句
  • VIM 高亮匹配开始/结束

    我正在尝试找到一个插件 它将突出显示与 Verilog 匹配的开始 结束语句 VIM 可以使用花括号 方括号 但不能使用它的开始 结束 我希望 VIM 突出显示正确的开始到正确的结束 在我看来 最好的选择是使用 matchit 该脚本是 v
  • verilog 中的案例陈述

    我遇到了优先级编码器设计 并找到了一种使用 case 语句来实现它的新方法 唯一令人困惑的是 case语句是否优先考虑case 例子 case 1 b1 A 3 Y lt 4 b1000 A 2 Y lt 4 b0100 A 1 Y lt
  • 使用正则表达式进行 Verilog 端口映射

    我有一个很长的端口映射 我想在其中替换一堆 SignalName i with SignalName SignalName i 我想我可以用正则表达式轻松地做到这一点 但我无法弄清楚如何做到这一点 有任何想法吗 假设 SignalData
  • 模块不是任务或 void 函数

    我正在尝试在 Verilog 中创建一个用于进位选择加法器的模块 除了以下部分导致编译错误之外 一切正常 module csa a b s cout input 15 0 a b output 15 0 s output cout wire
  • Verilog 中如何使用函数?

    在我的 FPGA Verilog 课程中 我的教授只是回顾了函数 他说在函数中 你可以按程序编写代码 然后 当您想要调用该函数时 您可以在always块中调用它 即 程序性地 也可以使用分配语句来调用它 对我来说 如何使用过程代码编写函数

随机推荐

  • Failed to initialize NVML: Driver/library version mismatch

    nvidia驱动安装之后 nvidia smi 报错 Driver library version mismatch 不重启系统的解决方法 查看系统日志 确定具体报错信息 dmesg tail 8598493 408944 NVRM API
  • Unity2018新功能抢鲜

    本文首发于 洪流学堂 微信公众号 洪流学堂 让你学Unity快人几步 洪流学堂公众号回复节点 获取ShaderGraph节点详解PDF文件 带目录 Shader一直是Unity开发者的一个难关 涉及到数学 图形学 shader语法等多个难题
  • oracle 导出指定表和导入

    导出之前要注意一个问题 版本的问题 所以导出的语句应该指定版本 版本应该是要导入这些表的数据库的版本 expdp user password sid tables table1 table2 file expdp2022111 dmp ve
  • LeetCode力扣热题一百·自我解法记录(JAVA版本·仅代码)

    1 两数之和 哈希表 题目链接 力扣 两数之和 简单 import java util HashMap class Solution public int twoSum int nums int target 创建哈希表 HashMap
  • JavaScript - 插入排序的两种方式

    插入排序1 新建一个新数组 循环遍历原始数据 把原始数组内的每一个逐个插入到新数组内 在插入的时候 按照一定的顺序插入 原始数组 var arr 9 2 5 3 7 6 4 1 8 准备一个新数组 var newarr 循环遍历原始数组 f
  • 大学生团体天梯赛(第六届)

    题目地址 天梯赛 include
  • 高级信息系统项目管理师十大领域

    文章目录 一 项目整合管理 1 制定项目章程 2 制定项目管理计划 3 指导与管理项目工作 4 管理项目知识 5 监控项目工作 6 实施整体变更控制 7 结束项目或阶段 二 项目范围管理 1 规划范围管理 2 收集需求 3 定义范围 项目范
  • Flutter 常用插件

    dio http请求库 flutter swiper carousel slider 图片 轮播组件库 package info url launcher 系统库 app相关信息 打电话 发邮件等 pull to refresh flutt
  • 数据结构题目汇总

    求整数最大间隔 性能 hash算法应用 题目描述 请输出数字序列的最大间隔 请使用以下伪随机数生成函数 rand32 生成伪随机数 int seed int rand return seed seed 214013L 2531011L gt
  • 通过Restful api接口上传文件

    Restful api接口获取文件流的方法如下 from requests toolbelt import MultipartEncoder with open ch01 mp4 rb as f file stream f read m M
  • 计算机视觉实战项目(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别)

    图像分类 教程博客 传送门链接 链接 在本教程中 您将学习如何使用迁移学习训练卷积神经网络以进行图像分类 您可以在 cs231n 上阅读有关迁移学习的更多信息 本文主要目的是教会你如何自己搭建分类模型 耐心看完 相信会有很大收获 废话不多说
  • 初探Javascript模块化开发

    随着简单网页逐渐变成交互复杂的网站应用 网页上的Javascript代码也变得越来越庞大 越来越复杂 加之随即而来的多人协作分工的开发方式 每个人只负责其中一个或者几个很小的功能模块 最终必须通过把各个功能模块组合才能变成一个完整的功能 而
  • 2023.9.6 Redis 的基本介绍

    目录 Redis 的介绍 Redis 用作缓存和存储 session 信息 Redis 用作数据库 消息队列 消息队列是什么 Redis 用作消息队列 Redis 的介绍 特点 内存中存储数据 奠定了 Redis 进行访问和存储时的快 可编
  • Java多线程专题-synchronized的使用

    为什么有线程安全问题 当多个线程同时共享同一个全局变量或静态变量 做写的操作时 可能会发生数据冲突问题 也就是线程安全问题 但是做读操作是不会发生数据冲突问题 使用同步方式解决线程安全 问 如何解决多线程之间线程安全问题 答 使用多线程之间
  • 学习SVG(十)滤镜

    什么是滤镜 使用滤镜后 在SVG中不会直接将图形渲染到画布上 是先将图形的像素保存到缓存中 然后将滤镜指定的操作应用图形的像素对象中 然后在把新的图形像素对象展示在画布上 使用filter元素指定一组 滤镜元素 在渲染图形对象时 将该操作应
  • 南航数据分析与挖掘课设1(上)——基于多元线性回归模型,ARIMA序列的中国GDP增长影响因素研究及预测(R语言)

    基于多元线性回归模型 ARIMA序列的中国GDP增长影响因素研究及预测 摘要 在国民经济发展的过程中 国内生产总值 GDP 是指按国家市场价格计算的一个国家 或地区 所有常驻单位在一定时期内生产活动的最终成果 常被公认为是衡量国家经济状况的
  • centos7 安装Anaconda3 亲测成功

    目录 Anaconda简介 1 下载 1 1 创建一个文件夹来存放安装包 1 2 进入到文件夹里面 1 3 wget命令行下载 1 4 下载情况 2 开始安装 2 1 进入到存放文件的位置 2 2 运行 sh 文件 2 3 进入注册信息页面
  • python中heapq的使用

    目录 1 heapq heapify list 2 heapq heappush heap item 3 heapq heappop heap 4 heapq nlargest n heap 5 heap nsmallest n heap
  • 用Flair(PyTorch构建的NLP开发包)进行文本分类

    Flair是一个基于PyTorch构建的NLP开发包 它在解决命名实体识别 NER 语句标注 POS 文本分类等NLP问题时达到了当前的顶尖水准 本文将介绍如何使用Flair构建定制的文本分类器 简介 文本分类是一种用来将语句或文档归入一个
  • 笔记——尤老师讲笔试

    1 Function内部不能使用时间延迟 也不能使用 这种事件触发 只能实现一些组合逻辑运算 也不能调用task task可以有时间延迟 function不可以用时间延迟 Verilog 中的 task 是一种不可综合的语法 它既提供了从不