module shift_tb
regclk
regdin
wiredout
parameterPeriod = 10
shift u1 (
.clk(clk),
.din(din),
.dout(dout)
)
initial
begin
clk = 0
din = 1'b0// 初始化输入din
rst = 0 // 低电平复位
#100
rst = 1 // 复位结束
end
always #(Period/2) clk <= ~clk // clk为10ns
always @(posedge clk)
begin
din <= {$random} % 2 // 产生0和1的随机数,用来做随机输入值
end
endmodule
建立.v文件,文件名为 shift_tb.v ,这个就是仿真文件。
`timescale 1ns / 1ps////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 16:19:44 06/21/2010
// Design Name: sell
// Module Name: D:/Xilinx/11.1/myproject/baidu/test.v
// Project Name: baidu
// Target Device:
// Tool versions:
// Description:
//
// Verilog Test Fixture created by ISE for module: sell
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
////////////////////////////////////////////////////////////////////////////////
module test
// Inputs
reg one_dollar
reg half_dollar
reg reset
reg clk
// Outputs
wire collect
wire half_out
wire dispense
reg k
// Instantiate the Unit Under Test (UUT)
sell uut (
.one_dollar(one_dollar),
.half_dollar(half_dollar),
.collect(collect),
.half_out(half_out),
.dispense(dispense),
.reset(reset),
.clk(clk)
)
initial begin
// Initialize Inputs
one_dollar = 0
half_dollar = 0
reset = 0
clk = 0
k=0
// Wait 100 ns for global reset to finish
#100
reset=1
// Add stimulus here
end
always #5 clk=~clk
always@(posedge clk)
begin
if(reset==0)
begin
one_dollar = 0
half_dollar = 0
end
else
begin
if(k==0)
begin
one_dollar=1
half_dollar=0
end
else
begin
half_dollar=1
one_dollar=0
end
if(collect==1)
begin
k=~k
end
end
end
endmodule
程序的语法没有问题,但实际上这程序根本无法工作。你把问题简化的太简单了
verilog里一般不声明输出类型的话 默认是wire型的如果你想在输出处寄存一下:比如使用always语句,则必须声明为reg类型
wire是线网,就是相当于实际中的连接线,你想assign的话就是直接连接,就是用wire型,他的值是随时变化的。比如你想寄存一下,让他在时钟边沿才变化就需要reg类型了
你的问题应该是主要讨论下wire型和reg型的应用区别吧
另外,团IDC网上有许多产品团购,便宜有口碑
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)