初學者仿真一個很簡單的分頻,不知道為啥只有輸入波形沒有輸出的波形,輸出信號就是一條紅線,求指點~~tb檔案和原檔案如下
`timescale 1 ps/ 1 ps
module div4_vlg_tst();
reg eachvec;
reg fin;
wire fout;
div4 i1 (
.fin(fin),
.fout(fout)
);
initial
begin
#0 fin = 1b'0;
end
always #5
begin
fin <= ~fin;
end
endmodule
原始檔案
module div4(fin,fout );
input fin;
output fout;
reg fout;
reg [1:0]q ;
always @(posedge fin)
begin
if(q==1)
begin
q<=0;
fout =~fout ;
end
else
q<=q+1;
end
endmodule
uj5u.com熱心網友回復:
div4中輸出埠fout定義為reg型,需要給一個初始值。uj5u.com熱心網友回復:
我也遇到類似問題,在板子上能跑,但是寫的仿真沒有輸出,就是一條紅線uj5u.com熱心網友回復:
一般要有個復位信號,用那個復位給fout賦初值uj5u.com熱心網友回復:
請賦初值,仿真前加激勵信號。uj5u.com熱心網友回復:
程式的問題很多,always模塊不要用always @(posedge fin),實際應用中不允許隨便用一個普通信號的上升沿來作為always模塊的觸發條件。我寫了個clk的4分頻,你看看吧module t5(
//System signals
input clk,
input rst_n,
//frequency divider signals
output reg clk_div4
);
reg [1:0] cnt;
//clk_div4
always @(posedge clk or negedge rst_n) begin
if(~rst_n)
clk_div4 <= 'b0;
else if(cnt == 'd1)
clk_div4 <= ~clk_div4;
end
//cnt
always @(posedge clk or negedge rst_n) begin
if(~rst_n)
cnt <= 'd0;
else if(cnt == 'd1)
cnt <= 'd0;
else
cnt <= cnt + 'd1;
end
endmodule
//仿真代碼
module test_t5;
// Inputs
reg clk;
reg rst_n;
// Outputs
wire clk_div4;
// Instantiate the Unit Under Test (UUT)
t5 uut (
.clk(clk),
.rst_n(rst_n),
.clk_div4(clk_div4)
);
initial begin
// Initialize Inputs
clk = 0;
rst_n = 0;
// Wait 100 ns for global reset to finish
#100;
rst_n = 1;
// Add stimulus here
end
always #5 clk = ~clk;
endmodule
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/108566.html
標籤:硬件設計
