本次仅进行FPGA部分的功能仿真,ModelSim的版本为ModelSim SE-64 10.5
工程描述:有符号数据的乘法运算,使用TD原语操作,芯片采用PH1系列芯片。
module Signed_test(
input clk,
input rst_n,
input signed[7:0] a,
input signed[7:0] b,
output reg signed[15:0] out
);
//寄存器 寄存有符号数据
reg signed [7:0] a_reg;
reg signed [7:0] b_reg;
wire signed [15:0] mult_out;
//assign mult_out = a_reg * b_reg;
always @(posedge clk)
begin
a_reg <= a;
b_reg <= b;
out <= mult_out;
end
PH1_LOGIC_MULT#(
.INPUT_WIDTH_A(8),
.INPUT_WIDTH_B(8),
.OUTPUT_WIDTH(16),
.INPUTFORMAT("UNSIGNED"),
.INPUTREGA("DISABLE"),
.INPUTREGB("DISABLE"),
.OUTPUTREG("DISABLE"),
.SRMODE("ASYNC"),
.IMPLEMENT("AUTO")
)
red_dap_mult(
.p(mult_out),
.a(a_reg),
.b(b_reg),
.cea(1'd1),
.ceb(1'd1),
.cepd(1'd1),
.clk(clk),
.rstan(rst_n),
.rstbn(rst_n),
.rstpdn(rst_n)
);
endmodule
`timescale 1ns/1ns
module Sim_mult;
reg clk;
reg rst_n;
reg signed[7:0] a;
reg signed[7:0] b;
wire signed[15:0] out;
always #10 clk = ~clk;
initial begin
clk = 0;
rst_n = 0;
a = 8'd0;
b = 8'd0;
#20
rst_n = 1;
a = -13;//1000_1101
b = -5;//1000_0101
#40
a = 10;
b = -10;
end
Signed_test Signed_test(
.clk(clk),
.rst_n(rst_n),
.a(a),
.b(b),
.out(out)
);
endmodule
首先需要在ModelSim安装目录下新建一个Anlogic的文件夹,用以存放安路仿真的文件,然后需要新建一个Src文件夹,将TD软件安装路径中的sim_release中所有器件的仿真模型复制到Src文件夹中。
点击File——New——Library,并命名该仿真库,点击OK。
点击Compile——Compile,然后选择ModelSim安装目录下,Src文件夹下的PH1中所有的文件。添加完成后如图:
点击File——New——Project,并命名该工程,点击OK。
点击ADD Existing File添加设计工程文件.V和仿真设计文件.V。(`提示: 这里的两个.V文件是工程中的文件,可以进行直接添加,并且在文件修改过程中,该部分的添加文件也将自动进行修改)。
添加完成后,该部分将会显示待测文件,且都是未检测状态,所以需要点击Compile All将所有文件进行检查。
检验完成后的状态如图
点击Simulate——Start Simulation,由于前面是在work下进行的仿真工程文件的添加,所以在work下寻找仿真文件,(`提示: 这里的Optimization中的勾选一定要勾选掉,否则将会有信号会被综合掉导致无法输出)。