随笔 - 284, 文章 - 0, 评论 - 60, 阅读 - 53万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

简单幅值计算(复数的绝对值)---Verilog

Posted on   沉默改良者  阅读(2657)  评论(0编辑  收藏  举报

简单幅值计算(复数的绝对值)---Verilog

复制代码
 1 //**************************************************************************************************************
 2 //Function descriprion: Approximately replace the magnitude of a complex number with the absolute value sum of
 3 //real part and imag part
 4 
 5 //Input: clock,Real,Imag
 6 //Output: absolute_value
 7 //**************************************************************************************************************
 8 
 9 `timescale 1ns/10ps
10 
11 module Magnitude_Simplified_Computing(
12     
13     input                wire                   Clk,                      /*系统时钟******//////
14     input                wire                   Rst_n,                    /*系统复位信号******////// 
15     input                wire                   DataEnable,  
16     input                wire    [20:0]         DataInRe,                  /*输入实部,位宽21位,二进制补码表示******//////
17     input                wire    [20:0]         DataInIm,                  /*输入虚部******//////
18     output               reg                    AbsoluteEnable,
19     output               reg     [21:0]         Absolute);          /*绝对值输出,经一次加法后,位宽变为22位,绝对值为正数******//////
20 
21 //-------------------------------------------------------------------------------
22      
23 reg BufferEnable;
24 reg [20:0] BufferDataRe;
25 reg [20:0] BufferDataIm;
26 
27 always @ (posedge Clk or negedge Rst_n)                    /*输入增加一级缓存,延迟一个时钟周期******//////
28 begin
29     if (!Rst_n)
30     begin
31         BufferEnable <= 0;
32         BufferDataRe <= 0;
33           BufferDataIm <= 0;                  
34     end
35     else
36     begin                                                 /*缓存的数据为输入数据的绝对值******//////
37         if(DataEnable)
38         begin
39             BufferEnable <= 1;
40             if(DataInRe[20] == 0)                /*符号位为0,表示为正数,绝对值即为输入数******//////
41                 BufferDataRe <= DataInRe;                      
42             else                                          /*符号位为1,表示为负数,绝对值为输入数取反加1******//////
43                  BufferDataRe <= ~ DataInRe + 1;
44 
45             if (DataInIm[20] == 0)                   /*虚部运算同实部******//////
46                 BufferDataIm <= DataInIm;
47             else
48                  BufferDataIm <= ~ DataInIm + 1;
49         end
50         else
51         begin
52             BufferEnable <= 0;
53             BufferDataRe <= 0;
54             BufferDataIm <= 0;
55         end
56     end
57 end
58 
59 //-------------------------------------------------------------------------------
60 
61 always @ (posedge Clk or negedge Rst_n) 
62 begin
63     if (!Rst_n)
64     begin
65         Absolute <= 0;
66         AbsoluteEnable <= 0;
67     end
68     else
69     begin                         
70         if(BufferEnable)
71           begin
72             /*求取实部与虚部的绝对值之和******//////
73             Absolute <= {BufferDataRe[20],BufferDataRe} + {BufferDataIm[20],BufferDataIm};    
74             AbsoluteEnable <= 1;
75         end
76         else
77         begin
78             Absolute <= 0;
79             AbsoluteEnable <= 0;
80         end
81     end
82 end    
83 
84 endmodule
复制代码

 

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2018-06-29 阅读 Device Driver Programmer Guide 笔记
2017-06-29 Xilinx AXI总线学习(1)
点击右上角即可分享
微信分享提示