本帖最后由 yq327115059 于 2019-6-17 09:49 编辑
我在使用vivado实现RO电路时,采用的是一个与非门和四个非门结构,直接对LUT单元原语操作,给了与非门的使能端(我随便选的一个端口作为使能端)一个先低后高的触发信号,但是在使能端信号变高的时间点,simulation的时序图无法继续进行了,但是输出(也就是最后一个非门接到与非门的另一端的信号)会在0 1 之间变化。下面附上我的代码和结果截图,请会的大神指点!!!感激不尽
我的代码:
- `timescale 1ns / 1ns
- module RO(
- input Enable,
- output Output
- );
- (*KEEP="TRUE"*)
- wire[4:0] Signal;
- LUT1 #(.INIT(2'b01)) Inv1 ( .O(Signal [1]), .I0(Signal [0]) );
- LUT1 #(.INIT(2'b01)) Inv2 ( .O(Signal [2]), .I0(Signal [1]) );
- LUT1 #(.INIT(2'b01)) Inv3 ( .O(Signal [3]), .I0(Signal [2]) );
- LUT1 #(.INIT(2'b01)) Inv4 ( .O(Signal [4]), .I0(Signal [3]) );
- LUT2 #(.INIT(4'b0111)) NAND ( .O(Signal [0]), .I0(Signal [4]), .I1(Enable) );
- assign Output = Signal [4];
- endmodule
复制代码
仿真的代码:
- module RO_tb(
- );
- (*KEEP = "TRUE"*)
- reg a;
- wire y;
- initial
- begin
- a=0;
- #1 a=1; //10ns后进行翻转,作为激励信号
- end
-
- RO U1(
- .Enable(a),
- .Output(y)
- );
- endmodule
复制代码
仿真到10ns就无法继续了:
C:UsersYQDesktop、1
C:UsersYQDesktop2
从两张图可以看出输出y值在变化,但是时序图停在一个点!!!
还有一个Verilog的小问题
reg Ena;
if(Ena == 1) //此时会报错,‘Ena’ is not a constant
感觉这个报错看不懂,知道原因的朋友帮个忙吧!!!
后来我把if放到always里就没有报错了,好像if不能直接模块下
一周热门 更多>