Clark Transform的FPGA代码实现讲解

2024-04-20 22:52

本文主要是介绍Clark Transform的FPGA代码实现讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        Clark 变换是坐标转换,将输入的三相电流转换到两相直角坐标下电流,如下图为坐标表示方法。

根据坐标的投影我们可以得到

从而可以推知:

上述公式为最终代码中实现的计算公式。

        在FPGA中实现时,由于FPGA中不擅长浮点数计算,因此代码中涉及的数据量全部用Q格式来表示。Q格式表示为:Qm.n,表示数据用m比特表示整数部分,n比特表示小数部分,共需要 m+n+1位来表示这个数据,多余的一位用作符合位。假设小数点在 n位的左边(从右向左数),从而确定小数的精度。例如Q15表示小数部分有15位,一个short 型数据,占2个字节,最高位是符号位,后面 15位是小数位,就假设小数点在第 15位左边,表示的范围是: -1<X<0.9999695  。浮点数据转化为 Q15,将数据乘以2^15Q15数据转化为浮点数据,将数据除以 2^15

        应用Q15格式,使用Verilog代码编写的clark变换算法如下所示:

module clark_transform
#(parameter WIDTH = 16)
(
input  clk,
input  rst,
input  start,
output out_valid,

input  [WIDTH-1:0] i_w,
input  [WIDTH-1:0] i_u,

output reg [WIDTH-1:0] i_alpha,
output reg [WIDTH-1:0] i_beta 
);

localparam    DELAY = 4;
reg           start_delay = 0;
wire          start_edge = !start_delay & start;
reg [DELAY:1] delay_cnt = 0;

always @(posedge clk or posedge rst)begin
    if(rst) begin 
              start_delay   <= 0;
              delay_cnt <= 0;
    end                         
    else    begin
              start_delay   <= start;
              delay_cnt <= {delay_cnt[DELAY-1:1],start_edge};
    end               
end

reg  signed [WIDTH-1:0] mult_din0;
wire signed [WIDTH-1:0] mult_din1 = -16'd18919;
wire signed [2*WIDTH-1:0] mult_dout;

multiplier  mult (.clk(clk), .dataa(mult_din0), .datab(mult_din1), .dataout(mult_dout));
defparam inst_mult.WIDTH = WIDTH;

always @(posedge clk or posedge rst)
    if(rst) begin 
             mult_din0 <= 0;
             i_alpha   <= 0;
             i_beta    <= 0;
    end      
    else begin
           
           if(start_edge)begin
               i_alpha   <= i_u;
               mult_din0 <= i_u + {i_w[WIDTH-2:0],1'b0};    
           end
           
           if(delay_cnt[3])
             i_beta   <= mult_dout[WIDTH-1+10:10];               
    end

assign out_valid = delay_cnt[DELAY];
    
endmodule

 

        在代码中应用了Q15格式,存在常数1/sqrt(3)=0.57735026918962576450914878050196,

转化为Q格式的数据为0.57735026918962576450914878050196*2^15=18918。

在start信号的上升沿触发后,需要4个时钟周期才计算出正确的结果,因此在out_valid上升沿时,输出正确的Clark Transform结果。

这篇关于Clark Transform的FPGA代码实现讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/921538

相关文章

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

jupyter代码块没有运行图标的解决方案

《jupyter代码块没有运行图标的解决方案》:本文主要介绍jupyter代码块没有运行图标的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录jupyter代码块没有运行图标的解决1.找到Jupyter notebook的系统配置文件2.这时候一般会搜索到

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

java实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.