基于Verilog语言开发的FPGA密码锁工程。通过矩阵键盘输入按键值。输入12修改密码,13清除密码,可以修改原来默认的密码,修改时首先要输入当前密码进行验证,正确后才能更新当前密码,否则修改不成功。修改结束后按键15,确认修改成功。也直接使用默认密码作为最终密码使用。按键14,进入开锁阶段之后,输入密码进行开锁。有两个版本,分别为Quartus和vivado两个版本。工程均带有完整的仿真模块。前两张图为一个简单文档说明。最后两张图为quartus的仿真图。ID:49200643325544397
什么是扰码 扰码就是对原始的用户数据进行扰乱,得到随机化的用户数据。连续扰码两次就能得到原始数据,通常是发送电路在发送数据时先对数据进行随机扰乱,接收电路使用相同的扰乱算法就可以重新恢复出原始的数据。如图所示:扰码器的优点和作用 扰码器产生伪随机的比特序列,它和输入的数据进行异或(相加模二),从而实现对输入串行数据的随机化,伪随机序列也是周期重复的,周期长度取决于反馈多项式中触发器的级数和所选择的多项式。接收电路本地有一个和发送电路相同的伪随机序列产生器,它产生的数据和接收数据进行异或,可以恢复出发送端原始的串行数据。 反馈多项式通常是f(x)=x^n+x^(n-1)
VerilogHDL的基本语法模块•VerilogHDL程序是由模块构成的。每个模块的内容都是嵌在module和endmodule两个语句之间。每个模块实现特定的功能。模块是可以进行层次嵌套的。正因为如此,才可以将大型的数字电路设计分割成不同的小模块来实现特定的功能,最后通过顶层模块调用子模块来实现整体功能。•每个模块要进行端口定义,并说明输入输出口,然后对模块的功能进行行为逻辑描述。•VerilogHDL程序的书写格式自由,一行可以写几个语句,一个语句也可以分写多行。•除了endmodule语句外,每个语句和数据定义的最后必须有分号。•可以用/*.....*/和//.......对Veril
1、理论知识实现方法:将数字量转换为模拟量,根据输出数字量的大小转换为模拟量以实现信号幅值的变化。具体思路:提前声明一个ROMIP核,将正弦波、三角板、方波和锯齿波的数字量写入进去,或者也可以自己用Verilog写一个ROM,ROM作为只读的一个存储器,在声明的时候需要提前将数据写入到ROM中,然后给定其一个地址,便会输出该地址所对应的数据以实现信号波形的输出。根据思路进行举例说明:若要实现一个正弦波的输出,提前将ROM的深度定义为1024,宽度定义为10位宽。则ROM中有1024个数据,每个数据的位宽为10位二进制,这1024个数据代表了一个正弦波。由于位宽为10位,则输出幅值的最大值为2^
1、理论知识实现方法:将数字量转换为模拟量,根据输出数字量的大小转换为模拟量以实现信号幅值的变化。具体思路:提前声明一个ROMIP核,将正弦波、三角板、方波和锯齿波的数字量写入进去,或者也可以自己用Verilog写一个ROM,ROM作为只读的一个存储器,在声明的时候需要提前将数据写入到ROM中,然后给定其一个地址,便会输出该地址所对应的数据以实现信号波形的输出。根据思路进行举例说明:若要实现一个正弦波的输出,提前将ROM的深度定义为1024,宽度定义为10位宽。则ROM中有1024个数据,每个数据的位宽为10位二进制,这1024个数据代表了一个正弦波。由于位宽为10位,则输出幅值的最大值为2^
Chisel项目构建、运行和测试(二)——Chisel中生成Verilog代码&Chisel开发流程上一篇文章我们提到了怎么用sbt构建Chisel项目并运行Chisel代码,但是毕竟还是在电脑上运行的。而在实践中,我们写的Chisel代码最终应该综合到FPGA或ASIC上,所以必须把Chisel翻译到一个综合工具能处理的硬件描述语言,比如Verilog。那怎么用Chisel代码生成Verilog代码呢?Chisel的开发流程又是怎样的呢?这篇文章来学习一下。Chisel生成Verilog代码Chisel是可以生成可综合的Verilog代码的,把生成Verilog的代码放到一个应用入口里面就可
Chisel项目构建、运行和测试(二)——Chisel中生成Verilog代码&Chisel开发流程上一篇文章我们提到了怎么用sbt构建Chisel项目并运行Chisel代码,但是毕竟还是在电脑上运行的。而在实践中,我们写的Chisel代码最终应该综合到FPGA或ASIC上,所以必须把Chisel翻译到一个综合工具能处理的硬件描述语言,比如Verilog。那怎么用Chisel代码生成Verilog代码呢?Chisel的开发流程又是怎样的呢?这篇文章来学习一下。Chisel生成Verilog代码Chisel是可以生成可综合的Verilog代码的,把生成Verilog的代码放到一个应用入口里面就可
1integrationFC设计LeNet-5网络结构全连接部分如图所示,该部分有2个全连接层,1个TanH激活层,1个SoftMax激活层:图片来自附带的技术文档《HardwareDocumentation》integrationFC部分原理图,如图所示,图中W1和W2分别是存储全连接层FC1和全连接层FC2的权重:全连接层FC1输入神经元个数为3840/32=120个,输出神经元个数为2688/32=84个,原理图如图所示:Tanh激活层的输入输出位宽均为32位,原理图如图所示:全连接层FC2输入神经元个数为2688/32=84个,输出神经元个数为320/32=10个,原理图如图所示:SM
文章目录一、知识储备1、tb文件的基本结构2、tb时钟激励的产生产生占空比为50%的时钟脉冲产生固定数量的时钟脉冲3、tb复位激励的产生4、tb输入激励的产生5、仿真终端显示描述6、tb文件中的主要函数语法二、HDLbits题目部分1、Tb/clock产生时钟激励2、Tb1有输出3、Tb/and有输入输出4、Tb2(含有时钟和输入输出)5、TFFT触发器三、补充新增HDL习题Cs450/timer计时器Cs450/counter2bcCs450/historyshift历史移位寄存器Cs450/gshare一、知识储备为什么要进行tb文件测试?编写testbench的目的就是为了测试使用HDL
基于Verilog的跑马灯设计一、设计要求二、设计思路1.总体框图2.按功能模块的分模块结构图3.状态图三、代码实现1.Verilog代码2.Testbench关键代码3.程序的流程步骤四、仿真结果一、设计要求设计一个能够有多种工作模式控制的8个灯亮灭的电路。工作模式1:按照从左到右的方向,依次点亮每一盏灯,然后依次熄灭每一盏灯;工作模式2:分成两组灯,前四个灯为1组,后四个为2组,1组灯按从左到右依次点亮,同时2组灯按从右到左依次点亮,然后两组灯按各自点亮的顺序依次熄灭;工作模式3:用11110000作为一组灯的序列,按照该顺序完成8盏灯亮灭:即首先灯1亮,然后灯2亮,然后灯3亮,然后灯4亮