Verilog笔记1

verilog内的different 是 ^
不同位数的数值比较时: the upper bits are cut off
在Verilog中,0x34表示十六进制数,它的二进制表示为0011 0100,十进制表示为52。
锁存器 是电平敏感(非边沿敏感)电路,因此在一个始终块中,它们使用电平敏感灵敏度列表。但是,它们仍然是顺序元素,因此应该使用非阻塞赋值,D 锁存器在启用时就像一条线,在禁用时保留当前值。
同步异步FIFO 设计
first in first out
同步:用于数据缓冲器
异步:跨时钟域处理。
可用RAM(random access memory)设计
full不能写,empty不能读
方法1:长度计数器factor。写:factor+1;读:factor-1.
方法2:地址位扩展一位,最高位判断空满,低位地址:R_ADDR=W_ADDR.判断:高位相等=空,不相等=满。
Verilog和C的区别
Verilog和C是两种不同的编程语言,主要用于不同的应用领域。

  1. 应用领域:Verilog是一种硬件描述语言(HDL),主要用于描述数字电路的行为和结构。它被广泛应用于数字电路设计、半导体芯片设计、FPGA编程等领域。而C语言是一种通用的高级编程语言,主要用于软件开发,可以用于开发各种类型的应用程序。

  2. 语法结构:Verilog具有专门的语法和特性,以便于描述硬件电路的行为和结构,如时序逻辑、组合逻辑、寄存器、端口等。它还支持并行处理和并行模拟。相比之下,C语言是一种过程性编程语言,其语法更加通用,适用于编写复杂的算法和数据操作。

  3. 运行环境:Verilog代码通常需要在硬件描述工具中进行综合、仿真和硬件调试。而C语言代码可以在通用的计算机平台上直接编译和运行。

  4. 数据类型:Verilog主要支持位向量和寄存器等硬件相关的数据类型,用于表示和操作数字信号。而C语言提供了更多的数据类型,如整型、浮点型、指针等,用于处理更广泛的数据和操作。

需要注意的是,Verilog和C语言虽然在语法和应用领域上有区别,但它们也有一些共同之处,如变量、循环、条件判断等基本编程概念。这使得一些复杂的系统可能会同时使用Verilog和C语言来实现硬件和软件部分。
三角波发生器(状态机)
在这里插入图片描述
假设:上升状态为0,下降状态为1
在0:计数器进行加一操作,加到299
1:计数器进行减1操作,减到1
在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/348ae108c58a4e04ad79beb6916e920c.png
在这里插入图片描述

参考:https://blog.csdn.net/weixin_41788560/article/details/118443505
思路:分段,每段对应一个状态

`timescale 1ns/10ps
module tri_gen(
	clk,
	res,
	d_out
);
input clk;
input res;
output [8:0] d_out;
reg [1:0] state;
reg [8:0] d_out;
reg [7:0] cnt;//counter for flag,max=200
always @(posedge clk,negedge res)
if(~res)
begin
	state<=0;
	d_out<=0;
	cnt<=0;
end
else begin
	case(state)
		0://上升段
		begin
           		d_out<=d_out+1;
			if(d_out==9'd299)begin
                		state<=1;
            	  	end 
		end
		1:begin
			if(cnt==200)begin
				state<=2;
				cnt<=0;
			end
			else begin
				cnt<=cnt+1;
			end
		  end
				
		2:begin
           		d_out<=d_out-1;
			if(d_out==9'd1)begin
                		state<=0;
                         end	
		  end 
		default://为了下降沿降到0
			begin
			state<=0;
			cnt<=0;
			d_out<=0;	
            end
		
	endcase
end
endmodule
//testbench for tri_gen
module tri_gen_tb;
reg				clk,res;
wire[8:0]		d_out;
tri_gen u1(
				.clk(clk),
				.res(res),
				.d_out(d_out)
				);
 
initial begin
 
					 clk<=0;res<=0;
			#17		 res<=1;
			#20000 	 $stop;//要改变运行时间长度
end
 
always #5 clk<=~clk;
 
endmodule

在这里插入图片描述在这里插入图片描述
Testbench:
在定义端口时,testbench中对所有输入都定义为reg型,所有输出都定义为wire型。

timescale 1ns/1ns
/*题目描述:
请编写一个信号发生器模块,根据波形选择信号wave_choise发出相应的波形:
wave_choice=0时,发出方波信号;
wave_choice=1时,发出锯齿波信号;
wave_choice=2时,发出三角波信号。
*/
module signal_generator(
	input clk,
	input rst_n,
	input [1:0] wave_choise,
	output reg [4:0]wave
	);
	reg [4:0] cnt;//计算周期数,跟半周期数有关;
	reg flag;//标志三角波;
	//设置cnt;
	always @(posedge clk,negedge rst_n)
	begin
			if(!rst_n)
				cnt<=0;
			else begin
				if(wave_choise == 0)begin
					if(cnt>=19)
						cnt<=0;
					else 
						cnt<=cnt+1;
				end
			else
				cnt<=0;
			end
	end
	//设置flag,flag信号用来表征三角脉冲的上升下降状态,高为上升,低为下降;
	always @(posedge clk,negedge rst_n)
	begin
		if(!rst_n)
			flag<=1;
		else begin
			if(wave_choise == 2)begin
				if(wave == 19)
					flag<=1;
			 	else if(wave == 1)
					flag<=0;
				else
					flag<=flag;
			end
			else begin
				if(wave == 0)
					flag<=0;
				else
					flag<=1;
			end
		end
	end
	always @(posedge clk,negedge rst_n)
	begin
		if(!rst_n)
			wave<=0;
		else begin
			if(wave_choise == 0)begin
				wave<=cnt<9? 0 : cnt<19? 20 : 0;产生方波,保持0十个时钟,保持20十个时钟.//三种波形wave最大值都为20;
			end
			else if(wave_choise == 1)begin
				wave<= wave>=20? 0 : wave+1;产生锯齿,0递增到20
				end
			else if(wave_choise == 2)begin
				wave<= flag == 1? wave-1:wave+1;//
				end
			else
				wave<=0;
		end
	end
endmodule
//Testbench for signal_generator.

module signal_generator_tb;

reg clk;
reg rst_n;
reg [1:0] wave_choise;
wire [4:0] wave;

signal_generator DUT(
.clk(clk),
.rst_n(rst_n),
.wave_choise(wave_choise),
.wave(wave)
);

initial begin
clk = 0;
rst_n = 0;
wave_choise = 0;
#10 rst_n = 1;

#10 wave_choise = 0;

#2000 wave_choise = 1;

#2000 wave_choise = 2;

#10000 $finish;
end

always #5 clk = ~clk;

endmodule

在这里插入图片描述一串比较有意思的代码

count<=(count+1)%6;//对于6bit数据,计数器实现了只在0-5之间循环;

同步动态随机存取内存(synchronous dynamic random-access memory,简称SDRAM)是有一个同步接口的动态随机存取内存(DRAM)。通常DRAM是有一个异步接口的,这样它可以随时响应控制输入的变化。而SDRAM有一个同步接口,在响应控制输入前会等待一个时钟信号,这样就能和计算机的系统总线同步。时钟被用来驱动一个有限状态机,对进入的指令进行管线(Pipeline)操作。这使得SDRAM与没有同步接口的异步DRAM(asynchronous DRAM)相比,可以有一个更复杂的操作模式。
管线意味着芯片可以在处理完之前的指令前,接受一个新的指令。在一个写入的管线中,写入命令在另一个指令执行完之后可以立刻执行,而不需要等待数据写入存储队列的时间。在一个读取的流水线中,需要的数据在读取指令发出之后固定数量的时钟频率后到达,而这个等待的过程可以发出其它附加指令。这种延迟被称为等待时间(Latency),在为计算机购买内存时是一个很重要的参数。
SDRAM 相关资料:https://blog.csdn.net/zhoutaopower/article/details/119877482
页突发模式(Page Burst Mode)是一种高速数据传输模式,用于在计算机的内存与外部设备之间传输数据。在这种模式下,数据被分割成较小的页(通常是4KB或8KB)进行传输,而不是像连续模式那样按照连续的字节或块进行传输。
页突发模式的主要特点是在一次传输中连续地传输多个数据页。这样做可以减少传输过程中的开销,提高传输效率。具体来说,当内存与外部设备之间的传输开始时,外部设备会请求连续的多个数据页,并在一次传输中将这些页连续地传输到内存中。这样,传输过程中的寻址开销和传输控制开销可以大大降低,从而提高数据传输的效率。
页突发模式通常用于处理大量数据的传输,例如在磁盘与内存之间进行数据交换、网络数据传输等场景。在这些场景下,使用页突发模式可以有效地提高数据传输的效率,减少传输过程中的开销。
I/O电路是指输入/输出电路,主要包括以下几种类型:

  1. 并行口(Parallel Port):用于将计算机与外部设备(如打印机)进行并行数据传输。
  2. 串行口(Serial Port):用于将计算机与外部设备进行串行数据传输,如串行通信、调制解调器等。
  3. 通用串行总线(Universal Serial Bus,USB):用于连接计算机与各种外部设备,如键盘、鼠标、U盘等,具有热插拔和高速传输等特点。
  4. 音频接口(Audio Interface):用于连接计算机与扬声器、麦克风等音频设备。
  5. 网络接口(Network Interface):用于连接计算机与局域网或互联网,实现网络通信功能,如以太网口、无线网卡等。
  6. 显示接口(Display Interface):用于连接计算机与显示器、投影仪等显示设备,如VGA接口、HDMI接口、DisplayPort接口等。
    如 缓冲电路、检测电路、抗干扰电路、脉冲整形电路等电路单元
    (1)输入/输出数据锁存器。 (2)控制命令和状态寄存器。 (3)地址译码器。 (4)读/写控制逻辑。 (5)中断控制逻辑。
    core电路是指计算机的核心电路,主要包括以下几种类型:
  7. 中央处理器(Central Processing Unit,CPU):负责执行计算机的指令和控制各个硬件设备的工作,是计算机的核心组件。
  8. 内存(Random Access Memory,RAM):用于临时存储数据和程序指令,CPU通过读取、写入内存来进行数据处理。
  9. 图形处理器(Graphics Processing Unit,GPU):用于处理图形和图像相关的计算任务,如3D绘图、游戏渲染等。
  10. 输入输出控制器(Input/Output Controller,IOC):负责管理和控制计算机与外部设备之间的输入输出数据传输。
  11. 地址总线(Address Bus)和数据总线(Data Bus):用于在CPU和内存之间传递地址和数据。
  12. 时钟电路(Clock Circuit):用于提供计算机各个部件之间的同步时钟信号,控制计算机的工作节奏。
    Linux命令:
    rm <选项> [文件列表]
    选项说明: -r 递归将目录及以下文件逐层删除; -i 删除前询问确认;
    -f 指定强行删除无需确认,即使原文件属性设为只读; -v 详细:显示文件的删除速度。
    移动文件命令:
    mv <-f | -i> [文件1/目录1/文件列表][文件2/目录2/目录]
    -f :若目标文件已存在,不提示直接覆盖已有文件。
    -i:若目标文件有同名,则先询问是否覆盖已有文件;
    -v:详细:显示文件移动速度。
    文件内容统计命令:
    wc <选项> 文件列表
    统计指定文件中的字节数、字数、行数。
    -c :统计字节数
    -l:统计行数
    -w:统计字数
    查找文件:
    find [目录列表][匹配标准]
    eg: find -name “*.v” > rtl:找到名字为带.v后缀的文件,然后将此文件放到rtl文件夹内。
    find . !-name error -print (.表示在当前目录下查找名字为error的文件,并打印出路径)

在这里插入图片描述
查找文件内容
grep <选项> [匹配字符串] [文件列表]
排序指令
sort <选项> [文件列表](对txt文件内容进行排序) -r倒序排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值