Verilog功能模块——符号位扩展
生活随笔
收集整理的這篇文章主要介紹了
Verilog功能模块——符号位扩展
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一. 模塊功能與應用場景
模塊功能:符號位擴展
應用場景:DDR等存儲器通常是32/64位的,數據需要轉為合適的位數再存入。
二. 模塊框圖與使用說明
輸入和輸出都是二進制補碼,補碼的符號位擴展就是補最高位即符號位即可。
三. 模塊代碼
/** @Author : Xu Dakang* @Email : XudaKang_up@qq.com* @Date : 2021-05-14 09:50:48* @LastEditors : Xu Dakang* @LastEditTime : 2021-05-14 22:59:16* @Filename : signExtension.v* @Description : 符號位擴展模塊 *//* * 思路: 輸入數據為二進制補碼,判斷輸入數據的最高位,為1則高位補1,為0則高位補0; */module signExtension #(parameter INPUT_WIDTH = 24,parameter OUTPUT_WIDTH = 32 )(input wire signed [INPUT_WIDTH-1 : 0] input_number,output wire signed [OUTPUT_WIDTH-1 : 0] output_number );assign output_number = {{(OUTPUT_WIDTH - INPUT_WIDTH){input_number[INPUT_WIDTH-1]}}, input_number};endmodule四. testbench
/** @Author : Xu Dakang* @Email : XudaKang_up@qq.com* @Date : 2021-05-14 19:40:46* @LastEditors : Xu Dakang* @LastEditTime : 2021-05-14 22:58:24* @Filename : signExtension_tb.sv* @Description : testbench of signExtension */module signExtension_tb();timeunit 1ns; timeprecision 10ps;parameter INPUT_WIDTH = 24; parameter OUTPUT_WIDTH = 32;logic signed [INPUT_WIDTH-1 : 0] input_number; logic signed [OUTPUT_WIDTH-1 : 0] output_number;signExtension signExtension_inst(.*);// 生成時鐘 localparam CLKT = 2; logic clk; initial beginclk = 0;forever #(CLKT / 2) clk = ~clk; endinitial begininput_number = 12;#CLKT;input_number = 88;#CLKT;input_number = -18;#CLKT;input_number = -300;#CLKT;input_number = 24'hXX8CX2;#CLKT;$stop; endendmodule五. 仿真驗證
仿真工具:Vivado 2020.2 Simulator。
以16進制顯示:
以有符號10進制顯示:
六. 工程分享
signExtension 符號位擴展模塊 vivado 2020.2工程.7z
鏈接:https://pan.baidu.com/s/1kRQo_K1q3GQ8d0V2j1WG1w
提取碼:2xiz
總結
以上是生活随笔為你收集整理的Verilog功能模块——符号位扩展的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Verilog功能模块——取滑动平均值(
- 下一篇: Xilinx IP解析之Processo