主要内容

按位操作MATLAB高密度脂蛋白和SystemC代码生成

高密度脂蛋白编码器™支金宝app持转变,一点一点旋转、切片操作模拟HDL-specific和SystemC-specific运营商不饱和和舍入逻辑。

一些移动和旋转

下面的代码实现了一个桶移器/旋转执行(基于所选的操作模式论点)定点输入操作数。

函数y = fcn (u,模式)%多功能桶移器/旋转%固定宽度移位操作fixed_width = uint8 (3);开关模式情况下1%左移位逻辑y = bitsll (u, fixed_width);情况下2%改变正确的逻辑y = bitsrl (u, fixed_width);情况下3%的转变对算术y = bitsra (u, fixed_width);情况下4%左旋转y = bitrol (u, fixed_width);情况下5%向右旋转y = bitror (u, fixed_width);否则%什么也不做y = u;结束

这个表显示生成的硬件描述语言(VHDL), Verilog, SystemC代码。

硬件描述语言(VHDL)代码生成 Verilog代码生成 SystemC代码生成

在硬件描述语言(VHDL)®这个函数生成的代码,和旋转功能的转变直接映射到硬件描述语言(VHDL)的移位和旋转指令。

情况下模式是当“00000001”= >——左移位逻辑——< S2 >: 1:8的cr: = (u)签署sll 3;y < = std_logic_vector (cr);当“00000010”= >——转变对逻辑的< S2 >: 1:11 b_cr: = (u)签署srl 3;y < = std_logic_vector (b_cr);当“00000011”= >——转变对算术的< S2 >:一14 c_cr: = SHIFT_RIGHT(签署(u), 3);y < = std_logic_vector (c_cr);当“00000100”= >——左旋转的< S2 >: 1:17 d_cr: = (u)并签署3;y < = std_logic_vector (d_cr);当“00000101”= >——向右旋转的< S2 >: 1:20 e_cr: = (u)签署ror 3;y < = std_logic_vector (e_cr); WHEN OTHERS => -- do nothing --':1:23' y <= u; END CASE;

相应的Verilog®代码是相似的,除了Verilog没有本地运营商旋转指令。

案例(模式)1:开始/ /左移位逻辑/ / < S2 >: 1:8的cr = u < < < 3;y = cr;结束2:/ /开始转变对逻辑/ / < S2 >: 1:11的b_cr = u > > 3;y = b_cr;结束3:/ /开始转变对算术/ / < S2 >:一14的c_cr = u > > > 3;y = c_cr;结束4:开始/ /左/旋转/ < S2 >: 1:17的d_cr = {u (12:0), u (15:13)};y = d_cr;结束5:开始/ /向右旋转/ / < S2 >: 1:20的e_cr = {u (2:0), u (15:3)};y = e_cr; end default : begin // do nothing //':1:23' y = u; end endcase

生成的SystemC代码使用本机c++逐位运算符来完成这种转变操作。旋转操作使用运营商的转变。

# #包括“rtwtypes编译指示一次。高压泵”类fcnClass{公众:sc_ufixed < 16日6 > f (sc_ufixed < 16日6 > u, int8_T模式){sc_ufixed < 16日6 > y;sc_ufixed < 16日6 > c;6 > sc_ufixed < 16日c_0;sc_ufixed < 16日6 > c₁;sc_ufixed < 16日6 > c₂;6 > c = sc_ufixed < 16日(0.0);6 > c_0 = sc_ufixed < 16日(0.0);6 > c₁= sc_ufixed < 16日(0.0);6 > c₂= sc_ufixed < 16日(0.0); /* Multi Function Barrel Shifter/Rotator */ /* fixed width shift operation */ switch (mode) { case 1: /* shift left logical */ y = u << 3; break; case 2: /* shift right logical */ c_1 = u >> 3; y = c_1; break; case 3: /* shift right arithmetic */ c_2 = u >> 3; y = c_2; break; case 4: /* rotate left */ c = (sc_ufixed<16,6>)(u << 3) | (sc_ufixed<16,6>)(u >> 13); y = c; break; case 5: /* rotate right */ c_0 = (sc_ufixed<16,6>)(u >> 3) | (sc_ufixed<16,6>)(u << 13); y = c_0; break; default: /* do nothing */ y = u; break; } return y; } };

一点一点切片和连接

bitslicegetbitconcat函数直接映射到切片和硬件描述语言(VHDL)和Verilog连接运营商。

您可以使用功能bitslicegetbitconcat访问和操作位片(字段)定点或整数。作为一个例子,考虑交换的操作的上下4比特轻咬一个8位字节。下面的例子没有诉诸传统mask-and-shift技术完成了这个任务。

函数y = fcn (u)%啃掉期y = bitconcat (…bitsliceget (u 4 1), bitsliceget (u, 8、5));

这个表显示生成的硬件描述语言(VHDL), Verilog, SystemC代码。

硬件描述语言(VHDL)代码生成 Verilog代码生成 SystemC代码生成

下面的清单显示生成相应的硬件描述语言(VHDL)的代码。

实体fcn端口(std_logic clk:;在std_logic clk_enable:;重置:std_logic;u: std_logic_vector(7报纸0);y: std_logic_vector(7报纸0));nibble_swap_7b结束;架构fsm_SFHDL fcn开始——咬交换y < = u(3报纸0)&(7报纸4);fsm_SFHDL结束;

下面的清单显示生成相应的Verilog代码。

模块fcn (clk clk_enable,重置,u, y);输入时钟;输入clk_enable;输入重置;输入[7:0]u;输出[7:0]y;/ /咬交换分配y = {u(握),(七)};endmodule

下面的清单显示生成相应的SystemC代码。

# #包括“rtwtypes编译指示一次。高压泵”类fcnClass{公众:sc_uint < 8 > f (sc_ufixed < 16日6 > u) {sc_uint < 8 > y;sc_uint < 16 > tmp;sc_uint < 16 > tmp_0;/ *啃交换* / tmp = u ();tmp_0 = u ();< 8 > y = (sc_uint) (sc_uint < 4 >) ((sc_uint < 16 >) tmp & sc_uint < 16 > (15.0)) < < 4 | (sc_uint < 8 >) (sc_uint < 4 >) ((sc_uint < 16 >) (tmp_0 > > 4) & sc_uint < 16 > (15.0));返回y;}};

另请参阅

|

相关的话题