行业资讯
首先来看32-bit除法器的工作流程图,如下图所示,
我们以4-bit除法器的硬件实尘芹现作为例子学习,如下图所示,其中8-bit的ALU既要支持加法又要支持减法,
1 被除数与余数共用一个8-bit寄存器,称为余数寄存器,除数寄存器也是8-bit,将除数放在除数寄存器的高4位,4-bit商寄存器初始化为4'b0000
2 执行减法运算,余数寄存器 - 除数寄存器,并将结果再次放入余数寄存器,下一个时钟上升沿到来时,减法结果就会存入余数寄存器,在这个例子中,减法运算结果是8'b1110_0111
3 这一步检查余数寄存器的内容是否大于等于0,只需看余数寄存器的最高位,1代表这个数小于0,因此要回退刚才的减法操作。此时8-bit ALU的输入端分别是余数寄存器当前的数据8'b1110_0111和除数寄存器的数据,控制逻辑发出add操作,ALU将余数寄存器和除数寄存器相加,相加的结果在下一个时钟上升沿写入余数寄存器(控制寄存器会给出写入的控制信号),这就实现了回退的效果。
4 商寄存器左移1为,新的最右位填0
5 除数寄存器右移1-bit,新的数据是8'b0001_0000
6 检查是否是最后一轮循环
7 重复2 - 6的工作,直到5轮计算完成,派闭毕注意第5轮的除数寄存器的右移没有实际意义了,但是计算机不知道。
和4-bit除法器的原理是一样的,如下图所示,
目前的除法器存在如下浪费,
1 除数寄存器态者实际只使用了一半
2 商寄存器初始时是空的,从右到左逐位填满
3 余数寄存器初始时是满的,有实际意义的位从左到右逐渐减少
根据上面的浪费情况,提出以下解决方案,
1 除数寄存器缩减为32-bit,取消移位功能
2 取消商寄存器
3 64-bit ALU缩减为32-bit ALU
4 余数寄存器只有高32-bit参与加减法运算
5 余数寄存器需要支持左移和右移,左移是因为除数寄存器取消了右移功能,右移是因为余数可能会回退
6 商从右端逐位移入余数寄存器
7 运算结束时,商占据余数寄存器的低32-bit
优化后的除法器硬件结构如下图所示,
参考参考
很多微控制器(MCU)或PIC都有用于产生正弦波但是效果却不甚理想的数模转换器(DAC)输出。一般来说它们的分辨率都比较低(8到10比特),总谐波失真率(THD)在1%内。或者,MCU或PIC使用一个带方波输出的五阶或七阶开关电容滤波器,并连接到MCU的两个I/O引脚上。一个输出被用作滤波器输入,另一个输出被用作滤波器时钟。此外,这两个输出必须是方波,并以100:1的比率跟随。
因为MCU不仅要产生一个正弦波,它还进行更多处理,所以将两个定时器或一个定时器绑定至固件通常需要很多系统开销。因此系统设计工程师不得不使用更快或更加昂毁亮贵的MCU。
这里有一个更好的办法,即利用RDD104可选的游余埋4各十进制CMOS除法器和一个MSFS5 开关电容滤波器来构建一个双芯片、失真率为0.2%的正弦波源。RDD104有两个引脚,可以从四个除法器divide-by-10、divide-by-100、divide-by-1000和divide-by-10k中选择一个。在引脚5连接外部时钟或带一个晶振,该器件就可使用。最大频率在5V直流电压下为1.5 MHz。
文中给出了方波-正弦波转换示意图。RDD104的引脚5和引脚6连接一个晶振以及一个10MΩ的电阻。引脚5还接有一个100pF的电容(C5)。MSFS5的输入电容,以及RDD104引脚6与MSFS5引脚4之间的连接具有与晶振引脚2相等的电容。由于DIV_SEL_1电平低,DIV_SEL_2电平高,所以选择100:1除法器。
MSFS5 是一个引脚可选的、七阶、低通/6端带通开关电容滤波器。这个具有8个引脚的IC可以用在Butterworth、Bessel或椭圆低通滤波器上,还可用于倍频程、1/3和1/神蚂6倍频程带通滤波器上。RDD104的Clock_Out交流耦合到MSFS5的时钟输入。设置MSFS5为1/6倍频程带通操作以实现在基频无衰减情况下方波谐波的最大衰减。可通过将FSEL和TYPE连接到VDD获得带通和1/6倍频程配置。设置滤波器为单电源运行,VDD为5V,VSS为0,GND通过2个电阻(R4和R5)连接到中间电源。用一个0.1μF的电容作为输入去耦。RDD104的输出通过两个10kΩ的电阻衰减,并交流耦合到MSFS5的滤波器输入端。
有了这样的配置,我们就可以得到一个10kHz、1Vrms的正弦波输出。在5V直流下的总电流消耗少于2mA,这使该解决方案很适用于便携式应用,在400 Hz~300k Hz带宽之间,THD等于0.2%(在AP Portable One Plus Access测试条件下测试)。
除法器原理
和十进制除法类似,计算 27 除以 5 的过程如下所示:
在这里插入图片描述
除法运算过程如下:
(1) 取被除数的高几位数据,位宽和除数相同(实例中是 3bit 数据)。
(2) 将被除数高位数据与除数作比较,如果前者不小于后者,则可得到对应位的商为 1,两者做差得到第一步的余数;否则得到对应的商为 0,将前者直接作为余数。
(3) 将上一步中的余数与被除数剩余最高位 1bit 数据拼接成新的数据,然后再和除数做比较。可以得到新的商和余数。
(4) 重复过程 (3),直到被除数最低位数据也参与计算。
需要说明的是,商的位宽应该与被除数保持一致,因为除数有可能为1。所以上述手动计算除法的实例中,第一步做比较时,应该取数字 27 最高位 1 (3’b001) 与 3’b101 做比较。 根据此计算过程,设计位宽可配置的流水线式除法器,流水延迟周期个数与被除数位宽一致。
除法器设计
单独除法器设计
单步被除数位宽(信号 dividend)需比原始除数(信号 divisor)位宽多 1bit 才不至于溢出。为了便于流水,输出端需要有寄存器来存储原始的除数(信号divisor_orang_r)和被除数信息(信号 dividend_orang_r)。单步的运算结果就是得到新的 1bit 商数据辩棚(信号 merchant)和余数(信号 remainder)。为了得到最后的除法结果,新的 1bit 商数据(信号 merchant)还需要与上一周期的商结果(merchant_last)进行移位累加。单步运算单元设计如下(文件名 divider_cell.v):
module divider_cell#(
parameter N = 5,
parameter M = 3
)
(
input wire clk,
input wire rst_n,
input wire en,
input wire [N-1:0] dividend_orang, //原始被除数
input wire [M-1:0] divisor_orang, //原始除数
output reg [N-1:0] dividend_orang_r, //原始被除数
output reg [M-1:0] divisor_orang_r, //原始除数
input wire [M:0] dividend, //本轮被除数
input wire [N-1:0] merchant_last, //上一轮商结果
output reg valid, //本轮商有效标识
output reg [N-1:0] merchant, //本轮商
output reg [M-1:0] reminder //本携核则轮余数
);
always@(posedge clk) begin
if(en) begin
dividend_orang_r = dividend_orang;
divisor_orang_r = divisor_orang;
end
else begin
dividend_orang_r = 'b0;
divisor_orang_r = 'b0;
end
end
always@(posedge clk) begin
if(!rst_n) begin
valid = 1'b0;
end
else begin
valid = en;
end
end
always@(posedge clk) begin
if(!rst_n) begin
merchant = 'b0;
reminder = '氏氏b0;
end
else begin
if(en) begin
if(dividend = {1'b0, divisor_orang}) begin
merchant = (merchant_last1) + 1'b1;
reminder = dividend - {1'b0, divisor_orang};
end
else begin
merchant = merchant_last1;
reminder = dividend[M-1:0];
end
end
else begin
merchant = 'b0;
reminder = 'b0;
end
end
end
endmodule
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
流水线例化
流水线除法器能够实现流水计算,在N个周期连续计算出N个结果。
将单步计算的余数(信号 remainder)和原始被除数(信号 dividend)对应位的 1bit 数据重新拼接,作为新的单步被除数输入到下一级单步除法计算单元。其中,被除数、除数、及商的数据信息也要在下一级运算单元中传递。流水级模块例化完成除法的设计如下(文件名 pipeline_divider.v):
module pipeline_divider_top#(
parameter N = 32, //被除数位宽
parameter M = 32 //除数位宽
)
(
input wire clk,
input wire rst_n,
input wire en,
input wire [N-1:0] dividend,
input wire [M-1:0] divisor,
output wire valid,
output wire [N-1:0] merchant,
output wire [M-1:0] reminder
);
wire [N-1:0] dividend_orang [N-1:0]; //原始被除数、除数连线,需要N条
wire [M-1:0] divisor_orang [N-1:0];
wire [N-1:0] valid_cell; //valid连线,需要N条
wire [N-1:0] merchant_cell [N-1:0]; //商结果,需要N条
wire [M-1:0] reminder_cell [N-1:0];
divider_cell#(
.N ( N ),
.M ( M )
)u_divider_cell(
.clk ( clk ),
.rst_n ( rst_n ),
.en ( en ),
.dividend_orang ( dividend ),
.divisor_orang ( divisor ),
.dividend_orang_r ( dividend_orang[N-1] ),
.divisor_orang_r ( divisor_orang[N-1] ),
.dividend ( { {M{1'b0}}, dividend[N-1] } ),
.merchant_last ( 'b0 ),
.valid ( valid_cell[N-1] ),
.merchant ( merchant_cell[N-1] ),
.reminder ( reminder_cell[N-1] )
);
genvar i;
generate
for(i = 0; i N-1; i = i + 1) begin: divider_cell_pipeline
divider_cell#(
.N ( N ),
.M ( M )
)u_divider_cell(
.clk ( clk ),
.rst_n ( rst_n ),
.en ( valid_cell[i+1] ),
.dividend_orang ( dividend_orang[i+1] ),
.divisor_orang ( divisor_orang[i+1] ),
.dividend_orang_r ( dividend_orang[i] ),
.divisor_orang_r ( divisor_orang[i] ),
.dividend ( {reminder_cell[i+1], dividend_orang[i+1][i]} ),
.merchant_last ( merchant_cell[i+1] ),
.valid ( valid_cell[i] ),
.merchant ( merchant_cell[i] ),
.reminder ( reminder_cell[i] )
);
end
endgenerate
assign valid = valid_cell[0];
assign merchant = merchant_cell[0];
assign reminder = reminder_cell[0];
endmodule
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
非流水线除法器
这种除法器在N周期内只能完成一次除法计算,但只需要一个单步除法器。通过计数器来控制单步除法器单元的输入,从而实现移位除法计算。
2019年10月31日,SiFive公布了IP产品的一个里程碑,因为他们展示了其有史以来第一个乱序的CPU微体系结构,并承诺在现有RISC-V内核上实现显着的性能飞跃,并提供与Arm产品相比具有竞争力的PPA指标。
说起SiFive这个公司,其实很有意思。SiFive中国是在去年8月份成立的,与其他跨国企业的做法不一样的是,SiFive中国是一个独立公司,在中国独立运营,并非SiFive的子公司。它有自己的董事会,有自己的管理团队,未来它可以独立接受投资,也包括来自中国的投资。但同时也跟SiFive有关系,如提供IP还有其他方面的技术。
SiFive于2017年发布了U54系列,这是该公司第一个能够运行完整操作系统(例如Linux)的成熟CPU IP。
讲回正题,全球首个RISC-V处理器CPU,到底是一个什么东西?为什么RISC-V架构如此受追捧?
全新的RISC-V OoO CPU:U8面世
到目前为止,如果我们想基于新的ISA设计新的CPU,则首先要从小处着手,然后进行迭代,然后继续为设计增加更多的复杂性,这相对来说还不足为奇。SiFive的U5和U7系列相对来说CPU微体系结构较为简单。与Arm的低端和微控制器内核相比,它们能提供一些非常具有成本效益的选择和替代方案,但实际上并不能满足需要更高性能的更复杂工作负载的任务。
但新的U8系列通过大幅改善新的微体系结构,其性能比U54和U74高出5到4倍,这是我们行业中极其罕见的性能提升。
SiFive针对U8系列的设计目标也非常简单:直接对标Arm Cortex-A72,U8系列的目标是在性能上不相上下,并且在只有对手一半面积的同时提供1.5倍的更高的电源效率。当然,拿A72来比,还是有点“欺负”老产品的意味,不过SiFive的PPA目标相对较高,这意味着U8应该比Arm的最新一代内核更具竞争力。
RISC-V魅力何在?
顾名思义,RISC-V是RISC的第五个版本。RISC,即“精简指令集计算机”,是图灵奖得主John L. Hennessy和David A. Patterson对行业的重大贡献,由加州大学伯克利分校于1980年发布。芯片指令集帮助计算机软件与底层硬件设备通信,是计算机的基本组成部分。
我们先看看全世界对RISC-V的态度:
全球第一大硬盘产商西部数据(Western Digital)将以每年10亿到20亿颗的预期来推动RISC-V,逐步完成全线产品迁移到RISC-V定制架构;
MicroSemi提供基于Risc-V+Linux+CNN加速器的AI解决方案;
印度政府则大力资助基于RISC-V的处理器项目,使RISC-V成为了印度的事实国家指令集;
RISC-V基金会的会员已经增加到150多个,大学、科研院所和企业大量使用或评估基于RISC-V的应用,参与度之高,覆盖面之广,盛况空前;
指令集架构的生态链正在成长和完善,工具链、RTOS/Linux操作系统的移植等工作都取得关键突破。
无论模块化指令集“能屈能伸”,还是甩掉向后兼容 历史 包袱“无病一身轻”,再到40多条基本指令“大道至简”,且使用BSD License开源协议彻底开放,RISC-V的种种优势,宛如指令集纷繁万象中的一股春风。
早在去年,就有很多公司开始量产基于RISC-V的芯片,例如国内的嘉楠云智和华米等,他们做RISC-V芯片较早。行业人士当时也预计其他很多做RISC-V芯片的公司可能会在2019年或2020年正式推出基于RISC-V的芯片。
所以,兆易创新带来了GD32V系列开发板。
GD32V系列来袭
近期,业界领先的半导体供应谈梁商兆易创新正式推出全球首个基于RISC-V内核的GD32V系列32位通用MCU产品,提供完整工具链并持乱侍绝续打造RISC-V开发生态。
GD32VF103系列MCU采用了全新的基于开源指令集架构RISC-V的Bumblebee处理器内核,是兆易创新携手哗姿中国芯来 科技 面向物联网及其它超低功耗场景应用自主联合开发的一款商用RISC-V处理器内核。
GD32VF103系列RISC-V mCU提供了108MHz的运算主频,以及16KB到128KB的片上闪存和6KB到32KB的SRAM缓存, gFlash专利技术支持内核访问闪存高速雾等待。Bumblebee内核还内置了单周期硬件乘法器、硬件除法器和加速单元应对高级运算和数据处理的挑战。
GD32V系列新品全部符合工业级高可靠性和温度标准,并提供至少十年的持续供货保证。芯片的静电防护(ESD)防护水平在人体放电(HBM)模式可达5KV,器件放电模式(CDM)可达2KV,远高于行业安全标准,从而适用于复杂环境并让终端产品更可靠耐用。
全新的GD32VF103系列RISC-V MCU即刻上市。立创商城现已同步发售。
漫威mcu什么意思2、漫威第四阶段电影顺序3、复仇者联盟成员及英文名字介绍4、mcu初代六人是谁漫威mcu什么意思就是漫威电影宇宙。漫威电影宇宙(MarvelC...
mcu接受的信号后会发送信号吗2、MCU的主要功能3、模拟电路信号链估值高还是电源管理芯片估值高4、视频会议必须要用MCU??MCU是什么东西??mcu接受的信...
导航上的mcu升级是什么?现在最高级是多少?这个升级对汽车有什么影响...2、mcu是什么意思3、低功耗蓝牙MCU的“芯”比拼4、车规MCU芯片行业深度:市场高...
“mcu”和“会议终端”的区别是什么?2、汽车零部件行业发展现状怎么样?3、沁恒微芯片很垃圾4、MCU简介及详细资料“mcu”和“会议终端”的区别是什么?1、视...
国产MCU的发展怎么样?2、车规级mcu芯片龙头上市公司是什么?3、MCU简介及详细资料4、汽车mcu是什么意思国产MCU的发展怎么样?1、就我目前所知,现在市...
国产替代第一步,四维图新车规级MCU阵营再添新兵2、目前性能最好的单片机是哪一款?3、车规级mcu芯片龙头上市公司是什么?国产替代第一步,四维图新车规级MCU阵...
在jpeg中,最小编码单元的大小是多少2、MCU和DSP、FPGA在各方面的区别?3、MCU的1.有关国际标准4、“mcu”和“会议终端”的区别是什么?在jpe...
华为视频会议系统的MCU是什么?2、视频会议系统有哪些组成部分?3、MCU是什么?4、视频会议的MCU是什么意思啊5、视频会议中MCU的作用是什么?6、“mcu...
宝利通终端拨打mcu停在拨号状态2、实时时钟芯片哪家价格低?3、华为MCU和宝利通MCU怎么做级联宝利通终端拨打mcu停在拨号状态1、检查软件设置。确认MCU的...
iPhone15或将全部搭载苹果自研芯片2、进军科创板融资120亿,国内第三大晶圆代工厂崛起?3、美的属于多国战略还是跨国战略4、盘点未来10年最具龙头潜力的3...
一点销电子网
Yidianxiao Electronic Website Platform