- 博客(73)
- 收藏
- 关注
原创 基于I2C协议的EEPROM驱动控制
IIC协议的这些特点使其在嵌入式系统和集成电路间的通信中非常流行,特别是在对硬件资源要求较低、需要连接多个低速设备的应用场景中。A2A1A3地址表示可以连接8个EEPROM设备,当读写控制位为0表示主机要对从机进行数据写入操作,1表示主机要对从机进行数据读出操作。当主机把器件地址发送到总线上,所有的从机都会收到,然后和自身的器件地址做对比,如果和总线上的地址相同,那么从机设备就会给主机发送一个应答信号。内存地址只是一个编号,代表一个内存空间;内存地址所执行的内存单元大小就是1字节,跟内存地址位数无关。
2024-05-23 14:21:31 909
原创 简易DDS信号发生器的设计与验证
相位累加器:N表示K值位宽。并且在输入相位累加器之前还进行了数据寄存,表示K值在变化的时候,不会影响相位累加器的工作。相位调制器:寄存器的作用一样的,防止P变化影响相位调制器的正常工作。波形数据表ROM会存储要显示的完整周期的信号。比如完整周期的正弦波信号,假如地址位宽是12位宽,数据位宽是8位宽,那么就表示有2^12=4096个地址,每个地址可以存储1B数据。对正弦波信号进行完整的存储就是沿着横轴进行等间隔采样4096次,每次 采集的信号幅值用1个字节来表示。最大值是255,最小值是0。
2024-04-27 23:09:56 1511
原创 简易频率计的设计与验证
频率测量法缺点:时间T确定,但不能保证被测时钟信号在测量时间T内的时钟周期是整数倍。N出现误差那么 结果也会出现误差,而且被测信号的频率越小,T不变,N的个数就会变小,而误差是不变的。N越小误差对测量的结果影响是越大的。反之,被测信号的频率越大,T不变,N约大,那么正负1个时钟周期的影响较小。周期测量法直接测上升沿的一个时钟周期缺点:如果被测时钟信号的频率较低,测量时钟信号的上升沿是比较容易的,如果被测信号的频率很高,那么就需要用很高的计时器测量微小的时间差。所以周期测量法在高频时往往不能满足精度要求。
2024-04-23 17:34:54 765
原创 串口RS485
全双工:在同一时刻可以同时进行数据的接收和数据的发送,两者互不影响半双工:在同一时刻只能进行数据的接收或者数据的发送,两者不能同时进行差分信号幅值相同,相位相反,有更强的抗干扰能力。干扰对差分信号的影响都是相同的,所以差分信号的干扰一相减就没有了RS485的优点,采用差分信号有更强的抗干扰能力;
2024-04-14 23:26:36 748
原创 串口RS232
在同步通信中,双方使用频率一致的时钟,在传输的过程中,时钟伴随这数据一起传输。发送方和接收方使用的时钟都是由主机提供的。UART接收方并不知道数据什么时候会到达,所以双方收发都需要各自的时钟。所以不需要发送时钟,发送方发送的时间可以不均匀,接收方在数据的起始位和停止位之间实现数据的同步。因为数据收发都有独立的端口,所以可以实现全双工通信。RS232很多传感器芯片或CPU都带有串口功能,方便调试,只有两条数据线,节约IO接口。携带信息的传输单元叫码元。
2024-04-09 00:04:45 973
原创 fifo ip核————读写时钟不同步
在单位时间内,写数据的总带宽一定要等于读数据的总带宽。否则一定会存在数据写满或者读空的现象。(波特率(bandrate),指的是串口通信的速率,也就是串口通信时每秒钟可以传输多少个二进制位。比如每秒钟可以传输9600个二进制(传输一个二进制位需要的时间是1/9600秒,也就是104us),波特率就是9600。在8位到16位的转换过程中,首先写入的数据会称为16位数据的低位。异步fifo ip核的输入数据和输出数据是位宽可以不同。8位宽,2^8=256,数据深度是256。读写的数据交替出现。
2024-03-22 17:30:22 550
原创 计数器————
为什么周期是500ns,因为定义的计数器是24,0-24是25个周期发生反转,一个周期是20ns,20*25=500ns。parameter写在模块下可以作为实例化中参数传递的一个接口。比如这样实例化两次可以让计数器实现两个不同的计数器功能。注意实例化的名称要写在端口列表的前面。仿真的话修改参数也可以缩短仿真时间。实际是按100的参数来进行计数的。改进的使用脉冲标志信号。
2024-03-22 10:26:54 138
原创 阻塞赋值与非阻塞赋值
可以看到中间变量In_reg延迟输入In一个时钟周期,然后输出out延迟in_reg一个时钟周期,延迟了输入信号两个时钟周期。为什么out延迟in_reg一个时钟周期,是因为用的是非阻塞赋值,当等号右边发生变化时,左边不会立刻变化而是等到下一个时钟周期再一起变化。可以看出输出out和中间寄存器in_reg确实 和输入in相差一拍,也就是一个时钟周期。而out和in_reg没有延迟一拍是因为使用的是阻塞赋值。当想对一个信号打两拍时,可以使用阻塞赋值。一个寄存器可以实现延迟一拍的效果。
2024-03-22 10:24:48 188
原创 时序逻辑的开始-寄存器
时序逻辑延迟了一个时钟周期,因为表达组合逻辑时,如果时钟和数据是对齐的,默认当前时钟沿采集到的数据是在该时钟上升沿同一时刻的值,如果是时序逻辑,如果时钟和数据是对齐的,默认当前时钟沿采集到的数据是在该时钟输入数据前一时刻的值。复位信号在此刻拉低,但输出信号并无影响,而是在下一个时钟上升沿受到了影响,到下一个位置复位信号拉高,输出无影响,而在下一个时钟上升沿变化。如图,这就是异步复位,不用等到时钟的上升沿才复位,而是只要复位信号低电平,就有效,输出就会清0。上面的led_out是同步,下面的是异步。
2024-03-22 10:20:35 323
原创 避免latch的产生
因此latch只有在组合逻辑中才会产生。latch可以在没有时钟的情况下进行数据的存储。在异步电路中替代寄存器的角色。在同步电路要避免latch产生。3-8译码器正确的RTL图。
2024-03-22 10:12:49 225
原创 RAM IP核
每一个ram都有独立的读写端口。一定要定义读写优先顺序。若要访问一个地址,一定要定义优先顺序。一片是36K总容量。写和读需要数据位宽。当配置为1位宽,就只能使用32k,2位宽就可使用32k。
2024-03-20 23:45:05 241
原创 时钟IP核
CMT也是含有PLL和MMCM能提供高质量的时钟,抖动延迟都比较小。cc是时钟专用引脚。全局时钟bufferG,局域时钟bufferR,bufferIO专门为io提供时钟资源,还有一个行时钟。
2024-03-19 23:23:25 153
原创 数码管的动态显示(三)
data_reg寄存,只寄存符号位和数据位不包含小数点位。动态数码管每个显示1ms,所以计数到5*10^4-1为了将sel和seg同步,把sel打了一拍。6位都使用到了可以这么计算,6位都显示的是数据。或者最高位显示的是小数点,低5位是数据,因为数码管是共阳数码管,低电平才能点亮。
2024-03-14 23:47:02 370
原创 数码管的动态显示(二)
这个十六进制是右边的dp为高位。数码管的动态显示,在第一个计数周期显示个位,在第二个周期显示十位,在第三个周期显示百位由于人眼的视觉和数码管的特性,感觉就是显示了234,每个数码管的显示需要从输入的数据里提取出个十百位,所以需要BCD码。8,原来输入的数据有多少位宽就要移位多少次。增加一个BCD转码模块。修改系统框图。
2024-03-13 23:05:02 1155
原创 数码管的静态显示(二)
要按照上图的顺序传递位选和段选的数据。因为q0是最高位,共阳极数码管结构是dp....a,所以应该先传入低位a,而a在上图中的8段2进制编码中是seg[7],所以段选信号的顺序是seg[0],...seg[7]。因为输出信号是两个时钟,所以要进行分频,因为不能太高。因为是4分频,所以计数的最大值是3。(FPGA使用的晶振太高了, 74hc595 在50MHz的频率下没法正常工作, 所以选一个较为低一点的时钟频率作为触发)
2024-03-13 21:57:35 791
原创 数码管的动态显示(一)
把每一个数码管闪烁的时间设置为1ms,肉眼观察不到就会认为6个数码管在同时闪烁。实验目标:使用6位8段数码管实现数码管的动态显示,显示的内容就是0-999_999。当计数到最大值,让他归零,然后循环显示。每0.1秒加1。也就是说第一个0.1秒显示的是0,第2个0。1秒显示的是1。高电平定义小数点位有效。符号位也是高电平有效。因为没有用到小数点位和符号位,所以一直让其保持低电平。使能信号控制数码管的显示,当为高电平,数码管可以正常显示。
2024-03-04 22:06:07 585
原创 数码管静态显示(一)
计数0.5S,一个时钟周期20ns,因此要计数0.5s就是要从0计数到24999_999。级联两个芯片可以实现16位得串并转换MR是主复位端口,横线表示低电平有效。通常接到vcc,防止数据得清零。DS输入数据,SHCP输入时钟,在上升沿时刻,将输入的串行数据输入到移位寄存器中。Q7S溢出8位会输入到下一个595芯片中。内部得8位寄存器由STCP控制,是一个时钟,当STCP上升沿会将数据输入到寄存器当中,使能信号OE低电平有效时就将存储得数据输出出去。
2024-02-29 23:18:43 379
原创 无源蜂鸣器驱动实验
计划是,生成不同的7个频率控制蜂鸣器发声,每个音调发声0.5秒。50MHZ计数0.5秒,50MHZ一个周期20ns,要计数0.5秒 ,0.5/0.000_000_02s=25000_000个时钟周期。因为是从0开始计数,所以计数的最大值是0-2499_999。用一个计数器计数发音的7个0.5秒,当成是一个循环。1/262hz=0.0038167938931298s,约等于3816794 ns。因此3816794/20=190,839.7。约等于190840。
2024-02-28 23:26:19 401
原创 状态机-----
同步的意思就是状态的跳转都是在时钟的作用下跳转的,有限是指状态机中状态的个数是有限的。两种状态机的共同点都是状态的跳转只和输入有关,区别就是如果最后的输出只和当前状态有关而与输入无关,则是moore型状态机。如果最后的输出不仅和当前状态有关还和输入有关就称为mealy型状态机。状态机的每一个状态代表一个事件。我们需要做的就是执行该事件,然后跳转到下一事件。状态机特别适合描述那些事情发生有先后顺序或者是时序归类的事情。
2024-02-26 23:11:46 1287
原创 呼吸灯--FPGA
目录1.breath_led.v2.tb_breath_led.v呼吸灯就是从完全熄灭到完全点亮,再从完全点亮到完全熄灭。具体就是通过控制PWM的占空比控制亮灭程度。绘制PWM波的步骤就是,首先灯是在第一个时钟周期保持高电平熄灭状态,在第二个时钟周期保持1/10个时钟周期的低电平,其余都是高电平。在第3个时钟周期保持2/10的低电平,剩余都是高电平,依次绘制下去直到第11个时钟周期在一个周期内都是低电平点亮状态。然后下一个周期还是点亮状态,之后开始逐渐熄灭的波形图的绘制。首先1/
2024-01-31 00:00:17 1137
原创 Python面向对象-类专题
这是因为在计算最后薪资的方法内部用的还是类变量的形式访问的,这里可以改为实例变量的方式访问。通过类访问类变量,比如Person.name,还可以通过实例化访问类方法和类变量,实例化p=Person(),p.say_hello()访问类方法,p.name访问类变量。在Python中,if __name__ == '__main__': 这一句是一个常见的模式,用于判断当前的模块是被直接运行还是被导入到其他模块中。私有方法在子类里面也是访问不到的,也不能被继承,只能在类的内部被访问。self表示是类的实例。
2024-01-30 15:00:45 204
原创 python之异常的捕获、模块、包
经过测试,没有被使用的模块会变灰。__name__是python内置的变量,当以右键运行的时候,这个变量的名称就会标记为main。if就为true,测试语句就会被执行。是写在模块文件里的。这样其他文件导入这个模块的时候就不会执行测试语句了。此时只是*只能用all里面的函数方法,但是直接用import还是可以导入其他方法的。有了__init__.py所有的模块和这个文件一起组成包,没有__init__.py,那么众多的包也就是组成一个文件夹而已最好是导入包其中的模块。
2024-01-26 17:26:03 439
原创 李沐GAN论文逐段精读(自学笔记)
当生成器G是固定的,我的最优的D是由以上的公式计算得出的。Pg就是生成器所拟合的分布,把x放进去之后是等于多少,一个分布是一个在和1之间的数值,所以公式里的每一项都是大于等于0的,小于等于1。如图abcd,看图a,z是一个一维的标量,x也是一个一维的标量,噪音是均匀分布采样而来的,要真实去拟合的x类似于一个高斯分布,而z映射的是那条绿色的线。, z可以认为比如说一个100维的向量,她每一个元素是一个均值为0,方差为1的高斯噪音,生成模型就是把z映射成x,生成模型是一个MLP,她有一个可学习的参数叫做。
2024-01-25 15:07:55 814
原创 生成对抗网络
需要对输入做sigmoid()使输入变成[0,1]区间的数。而nn.BCEWithLogitsLoss()则是内嵌了sigmoid()操作。他们两个函数的区别就是对输入做的变换不同,的运算结果,和手动计算的结果一致。
2024-01-25 15:04:23 1478
原创 点亮流水灯
50MHZ一个周期是20ns,0.5秒就是20ns=0.02um=0.00002ms=0.000_00002s。0.5/0.000_00002s=25_000_000个时钟周期,表示要从0计数到24_999_999LED灯是低电平点亮,前0.5秒点亮第一个LED灯,当检测到脉冲信号点亮第二个灯,然后依次点亮。以上的波形图是采用左移的方式来led_out的赋值的,但是实际会发生错误,因为左移右移都是在空位补零并不会出现如上图的led_out的输出情况,因此考虑增添一个信号。
2024-01-22 23:29:20 528
原创 优化算法--李沐
损失值也就是预测值与真实值之间的差值是f(x),x是所有超参数组成的一条向量,c是可以限制的,比如说权重大于等于0。使用迭代优化算法求解一般只能保证找到局部最小值,因为一到局部最小的地方,用梯度下降算法的话此时的梯度就已经等于0了。凸集的意思就是在一个区域里面找一根线,这条线的任意一个点都在这个区域里面。凸函数最简单的理解就是,在函数上画两个点,这两个点连起来,保证整个函数都在连线的下面。
2024-01-22 11:24:25 405
原创 触摸按键控制LED灯
以上是上升沿和下降沿的组合逻辑和时序逻辑实现,逻辑或的写法刚好是逻辑与的两个寄存器的值反过来。以上的touch_flag是采用时序逻辑产生的,时序逻辑会延迟一拍。以上的波形图的touch_flag是采用组合逻辑的方式产生的。
2024-01-18 22:51:11 685
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人