笔记——尤老师讲笔试

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(使用前将#替换为@)

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

  • [Verilog] Verilog 基本格式和语法

    主页 元存储博客 全文 3000 字 文章目录 1 声明格式 1 1 模块声明 1 2 输入输出声明 1 3 内部信号声明 1 4 内部逻辑声明
  • 为什么这个 verilog 关系语句返回 true?

    我有一条名为 sin hall2 的 9 位签名线 该语句返回 true sin hall2 8 0 gt 9 d1 当我查看模拟时 sin hall2 169 我假设这是 verilog 处理比较负数的方式 但我做错了什么 当我执行 si
  • Verilog 中总是后面跟着 #(...) pound 是什么意思?

    在一个简单的时钟生成器示例中 我看到以下代码 always cycle 2 clk clk 我以前总是见过 但没见过井号 我试图在文档中找到它 但我所能找到的只是一些对 实值端口 的引用 没有进一步的阐述 这是一个延迟操作 它本质上只是读取
  • 信号连接到以下多个驱动器

    我尝试运行以下命令并收到此错误 这是 Verilog 代码 module needle input referrence input penalty output index 7 0 inout input itemsets input r
  • 修改后的 baugh-wooley 算法乘法 verilog 代码不能正确乘法

    以下 verilog 源代码和 或测试平台可以很好地工作商业模拟器 iverilog https www edaplayground com x 3TuQ也形式化验证工具 yosys smtbmc https gist github com
  • 将枚举转换为逻辑

    考虑以下模块声明 module DFF d q CLK RESET parameter W 2 input W 1 0 d input CLK input RESET output logic W 1 0 q endmodule 当 d 和
  • 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 我评论了下面代码中发生错误的行 代码被修剪 压缩 我搜索了答案 似乎我无法将输
  • 如何将时钟门映射到技术库单元

    我的设计中有以下时钟门 module my clkgate clko clki ena Clock gating latch triggered on the rising clki edge input clki input ena ou
  • 如何在 Verilog 中综合 While 循环?

    我尝试设计一个 Booth 乘法器 它在所有编译器中运行良好 包括 Modelsim Verilogger Extreme Aldec Active Hdl 和 Xilinx Isim 我知道模拟和综合是两个不同的过程 而且只有少数Veri
  • FPGA 有哪些实际应用?

    我对我的程序为一个小型七段显示器提供动力感到非常兴奋 但是当我向不在现场的人展示它时 他们总是说 那么你能用它做什么 我永远无法给他们一个简洁的答案 谁能帮我吗 第一 它们不需要具有易失性存储器 事实上 大厂商 Xilinx Altera
  • 在 Mac OS X 10.6.8 上用什么来编译和模拟 Verilog 程序?

    作为教学大纲的一部分 我需要模拟 Verilog 程序 但是 我的大学使用 Xilinx ISE 但它不适用于 Mac 因此 请帮助我提供最好的软件以及有关如何安装和使用它们的一些详细步骤 你可以尝试伊卡洛斯 Verilog http iv
  • 赋值语句中的“others=>'0'”是什么意思?

    cmd register process rst n clk begin if rst n 0 then cmd r lt others gt 0 elsif clk event and clk 1 then cmd r lt end if
  • 为什么 Verilog 不被视为编程语言? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 教授在课堂上说学生不应该说他们学会了用Verilog 编程 他说 Verilog 之类的东西不是用来编程的 而是用来设计的 那么 Verilog
  • 具有 +1 逻辑的 4 位计数器 D 触发器

    我正在尝试通过 Verilog 实现带有 1 逻辑的 D 触发器计数器 但是我收到了很多有关网络多个常量驱动程序的错误代码 有人可以帮我吗 这是到目前为止的代码 module LAB clk clear Enable Q input clk
  • 如何从 Spartan 6 写入 Nexys 3 FPGA 板上的 Micron 外部蜂窝 RAM?

    我到处都查过了 数据表 Xilinx 网站 digilent 等等 但什么也没找到 我能够使用 Adept 工具来验证我的蜂窝 RAM 是否正常运行 但我找不到任何库存 VHDL 代码作为控制器来写入数据和从中读取数据 帮助 找到了此链接
  • 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 端口映射

    我有一个很长的端口映射 我想在其中替换一堆 SignalName i with SignalName SignalName i 我想我可以用正则表达式轻松地做到这一点 但我无法弄清楚如何做到这一点 有任何想法吗 假设 SignalData
  • 可以购买哪些 FPGA(现场可编程门阵列)在家中进行实验? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 什么是 FPGA 在哪里可以买到 它们要花多少钱 您需要什么样的系统来试验它们 如何对它们进行编程 如果这是正确的术语 您能否使用普通 M

随机推荐

  • 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 是一种不可综合的语法 它既提供了从不