SD32DS NXP S32K3 定位HardFault_Handler方法

1    在Registers界面找到sp的地址。

2    将sp地址加入到Memory界面查找。

3    将查找到的LR地址(也可以试下当前地址+20的数据)加载到Disassembiy查找,便可以看到进入HardFault_Handler的位置。(注意地址存储方式是小端模式)

  • 14
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您编写一个Cordic算法的开方运算的Verilog代码,以下是代码实现: module cordic_sqrt(input [31:0] x, output reg [31:0] y, output reg finish); reg [31:0] z, x_next, y_next; reg [0:15] i; reg [31:0] angle; reg [31:0] atan_table [0:15] = '{16'sd11426, 14'sd6444, 13'sd3965, 12'sd2014, 11'sd1006, 10'sd503, 9'sd252, 8'sd126, 7'sd63, 6'sd32, 5'sd16, 4'sd8, 3'sd4, 2'sd2, 1'sd1, 0'sd1}; always @(*) begin if (x >= 0) begin z = 2**31; angle = atan_table[15]; end else begin z = -2**31; angle = -1 * atan_table[15]; end end always @(*) begin x_next = x - (y >> (i-1)); y_next = (angle * z) >> 22; if (y > 0) begin angle = angle - atan_table[i]; end else begin angle = angle + atan_table[i]; end end always @(posedge clock, posedge reset) begin if (reset) begin finish = 0; y = 0; end else if (finish == 0) begin if (i == 0) begin finish = 1; y = y + 1; end else begin y = y_next; z = z >> 1; i = i - 1; end end end endmodule 在这个模块中,我们使用Cordic算法实现开平方运算。我们首先确定输入值的符号,并在每个迭代步骤中使用角度表atan_table来计算atan(z)。然后,我们通过使用上一个输出值y的后乘值,减去下x,我们得到下一个输入值。我们还用旧的y值来调整角度值,因为我们知道在Cordic算法中,Y值是2的符号次幂。模块将循环执行,直到计算完所有16个角度,然后输出结果。请注意,我们使用了(angle * z)>> 22的乘法,因为我们使用16-bit fixed-point格式来执行angle存储和计算,其中有16个整数和6个分数位。我们根据i和每次迭代来更新该值 测试代码可以这样: module cordic_sqrt_tb; reg clk, rst; reg signed [31:0] dut_x; wire signed [31:0] dut_y; wire dut_finish; cordic_sqrt dut(.x(dut_x), .y(dut_y), .finish(dut_finish)); initial begin // set inputs dut_x = 4'h2; // initialize clk = 0; rst = 1; #10 // start test rst = 0; repeat (18) begin #20; dut_x <= dut_y; end #200; // end test $finish; end always begin #5 clk = ~clk; end endmodule 在这个测试版里,我们简单地构建了一个主要测试器件,设置输入,初始化电路并开始测试。每次一个结束并传递新的输入值。这个过程将重复循环18次,因为Cordic算法和16次迭代都需要至少17个时钟周期的时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值