APB总线协议
APB学习笔记APB简介
The APB is part of the AMBA 3 protocol family. It provides a low-cost interface that is optimized for minimal power consumption and reduced interface complexity.The APB interfaces to any peripherals that are low-bandwidth and do not require the high performance of a pipelined bus interface. The APB has unpipelined protocol.All signal transitions are only related to the rising edge of the clock to enable theintegration of APB peripherals easily into any design flow. Every transfer ta ...
基于迭代单元的不恢复余数开方器
基于迭代单元的不恢复余数开方器基本算法与恢复余数开方器类似,不恢复余数开方器也是通过迭代完成运算的,基本算法的伪代码如下所示
1234567891011Ra = 被开方数(位宽2W)Re = 余数(初值为0)Dout = 0for i in W -> 0 { if(Re > 0) { Re = {Re,Ra[2i - 1],Ra[2i]} - {Dout,2'b01} } else { Re = {Re,Ra[2i - 1],Ra[2i]} + {Dout,2'b11} } Dout = {Dout,!Re[MSB]}}
迭代单元基本算法迭代单元的基本算法即基本算法中for循环包裹的部分:
12345678910input Re = 上一余数input Dout = 上一结果if(Re > 0) { Re = {Re,Ra[2i - 1],Ra[ ...
基于迭代单元的恢复余数开方器
基于迭代单元的恢复余数开方器基本算法该开方器的算法与“手算”(以前并不知道开方还有这种手算的方法)算法相似,使用迭代解决,文字描述如下
将0为余数的初值a,0作为结果初值b
将被开方数前两位{I(2m + 1),I(2m)}取出,与01比较大小。若前两位大,则{I(2m + 1),I(2m)} - 01为输出余数(a(m)),输出结果1(b(m)),否则{I(2m + 1),I(2m)}为输出余数(a(m)),输出结果0(b(m))
将被开方数的从高位数第3,4位{I(2m - 1),I(2m - 2)}取出,比较{a(m),I(2m - 1),I(2m - 2)}和{b(m),2'b01}的大小,若前一项大,则输出余数a(m - 1)为前一项减后一项,输出结果b(m - 1)为{b(m),1};否则,输出余数为前一项(直接输出),输出结果b(m - 1)为{b(m),0}
…
直到计算完被开方数结束
迭代单元算法迭 ...
基于迭代单元的除法器
基于迭代单元的除法器迭代单元数字信号处理中,有大量的算法是基于迭代算法,即下一次的运算需要上一次运算的结果,将运算部分固化为迭代单元可以将数据处理和流程控制区分,更容易做出时序和面积优化更好的硬件描述,这次将基于迭代单元构造恢复余数和不恢复余数除法器
恢复余数除法器迭代单元算法
将除数移位i位
判断位移后的除数与余数大小
若位移除数大于余数,则余数输出当前余数,结果输出0;否则输出余数减位移除数,结果输出1
RTL代码12345678910111213141516171819202122232425262728293031module restore_cell #( parameter WIDTH = 4, parameter STEP = 1)( input clk, input rst_n, input [WIDTH * 3 - 1:0]remainder_din, input [WIDTH - 1:0]divisor, output reg [WIDTH * 3 - 1:0]remainder_dout, output reg quotient);wire [WIDTH * ...
不恢复余数除法器
不恢复余数除法器基本算法不恢复余数除法器的基本算法来自于恢复余数除法器,区别在于当余数变负时不停下恢复余数而是继续运行迭代,并在迭代中加上移位后除数而不是减去移位后除数,基本算法如下所示
将除数向左移位到恰好大于被除数
若余数为正:余数减去移位后除数;若余数为负:余数加上移位后除数;
若现余数为正,该位结果为1,否则为0,将除数向右移位一位
重复2,3,知道移位后除数小于原除数
RTL代码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182module norestore_divider #( parameter WIDTH = 4)( input clk, // Clock input rst_n, // Asynchronous reset active low input [WIDTH * 2 - 1:0]divi ...
selenium初探
selenium初探selenium简介与安装简介selenium是一个网站的自动化测试库,但由于其具有大量的自动化库而且可以调用浏览器,常常被用于爬虫技术。也正是因为其是调用浏览器的,这几乎成了一个无解的爬虫。在神经网络领域需要大量的数据集,爬虫是一种快速获得数据的方法,这也正是我学习这个库的动机
安装selenium安装使用pip install -U selenium即可
Diver安装selenium要调用各种浏览器需要对应的浏览器driver,我将使用chrome测试,测试成功后转为无界面的PhontomJS。使用Chrome需要将对应的driver下载后复制到Python的安装文件夹下,使用PhontomJS则直接将.exe文件复制到Python安装文件夹下即可
selenium基本操作浏览器操作导入库1from selenium import webdriver
打开浏览器12driver = webdriver.PhantomJS() #打开PhantomJS浏览器driver = webdriver.Chrome() #打开Chrome浏览器
访问网页1driver. ...
恢复余数除法器
恢复余数除法器算法描述恢复余数除法器是一种常用的除法器,过程与手算除法的方法很类似,过程为
将除数向左位移直到比被除数大
执行被除数减除数操作,得余数,并将商向左移位1位,空位补1
若余数大于0,除数向右移位1位。如余数小于0,余数加当前除数,商最后一位置0,除数向右移位1位
重复到2,只到除数比最初的除数小
RTL代码RTL代码就是使用了大量的if语句完成了以上的算法描述,其中
为了使移位后的除数确保大于被除数,直接将除数放到一个位宽WIDTH*3的寄存器的前WIDTH位
divisor_move >= '{divisor_lock}用于当移位除数小于原除数时停止
(divisor_move > '{remainder_r}) && (dout == 'b0)用于当出现第一个1时才开始保存结果
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 ...
移位相减除法器
移位相减除法器基本算法与使用移位相加实现加法一样,移位减法可以实现除法,基本算法如下描述
将除数向左移位直到比被除数大
使用移位后的除数与被除数比较,若除数大,则商向左移位1位后末尾补0;若除数小,则被除数累减除数,商向左移位1位后末尾补1
除数向右移位1位,重复2,知道除数小于原除数
RTL代码移位相减算法比较简单,一个Verilog模块即可描述
1234567891011121314module shiftsub_divider #( parameter WIDTH = 4)( input clk, // Clock input rst_n, // Asynchronous reset active low input [2 * WIDTH - 1:0]dividend, input [WIDTH - 1:0]divisor, input din_valid, output reg [2 * WIDTH - 1:0]dout, output reg [2 * WIDTH - 1:0]remainder);
定义端口,其中remainder前WIDTH位均为0,可以不连接 ...
Python驱动树莓派SPI接口
目的进行IC测试,需要使用SPI输入数据并采集数据,考虑使用树莓派可以直接将数据采集和数据处理结合成一体,避免易出错的数据采集部分(单片机或FPGA实现)
树莓派SPI接口物理接口
由上图中可以看出,树莓派的19,21,23构成了一个SPI接口,片选信号使用GPIO控制,本次并不使用自动的片选信号。速度方面,树莓派的接口有以下速度可以选择
速度
值
125.0 MHz
125000000
62.5 MHz
62500000
31.2 MHz
31200000
15.6 MHz
15600000
7.8 MHz
7800000
3.9 MHz
3900000
1953 kHz
1953000
976 kHz
976000
488 kHz
488000
244 kHz
244000
122 kHz
122000
61 kHz
61000
30.5 kHz
30500
15.2 kHz
15200
7629 Hz
7629
开启SPI接口使用sudo raspi-config命令进入配置选项后选择SPI接口,打 ...
Python解决大规模二进制数据错位
问题描述有一些二进制数据,每八位按顺序存为一个十进制数保存成CSV文件,每行为一个二进数数据,每个单元格均为一个十进制数。若数据为0000 0001 1000 0000,在CSV的一行中则存为1,128\n。现发现存储错位,需要将每个数据整体向左移位2位并保存成以上描述的格式
解决方法
将每个行数据读出并将每个十进制转换为8位二进制数的字符串(同时使用切片去除开头的二进制数标识)
将字符串整体连接起来,切去开头两个0并在结尾连接一个00
重新将字符串切片,并转换实验代码1234567891011121314151617# 读取数据 with open("./ramdata_brockenline.csv") as file_point: content_list = [x.split(",") for x in file_point.read().split("\n")] input_data = [] for content in content_list[:-1]: # 转换为 ...