《DL语言硬件设计》实验指导书 实验二:组合逻辑的数据流描述及仿真 一、实验目的: 1、掌握简单组合逻辑建模的设计方法。 2、掌握数据流描述语句assign的用法。 3、掌握运算符的使用 4、掌握赋值延时与线网延时知识 5、学会使用波形窗口观察波形 二、实验设备: PC机 ModelSim6.0开发软件 三、试验要求:设计输入(2学时) 学习使用ModelSim6.0设计软件。学习文本编辑器使用,掌握 文本编辑器的输入方法,完成本讲实例数据流描述2选1多路选 择器建模的输入和数据流描述1位全加器结构建模的输入,并完 成仿真。然后参照上述例子编写数据流描述4选1多路选择器以 及数据流描述4位全加器结构建模的输入,并完成仿真。 四、实验步骤: 参考例子代码: 数据流描述的2选1MUX module MUX2 1c(out,a,b,sel); output out; input a,b,sel; assign out=sel?b:a; endmodule 2选1多路选择器的仿真 'timescale 1ns/1ns module mux tpi reg a,b,sel; 第16页共49页
《HDL 语言硬件设计》实验指导书 第 16 页 共 49 页 实验二:组合逻辑的数据流描述及仿真 一、实验目的: 1、掌握简单组合逻辑建模的设计方法。 2、掌握数据流描述语句 assign 的用法。 3、掌握运算符的使用 4、掌握赋值延时与线网延时知识 5、学会使用波形窗口观察波形 二、实验设备: PC 机 ModelSim6.0 开发软件 三、试验要求:设计输入(2 学时) 学习使用 ModelSim6.0 设计软件。学习文本编辑器使用,掌握 文本编辑器的输入方法,完成本讲实例数据流描述 2 选 1 多路选 择器建模的输入和数据流描述 1 位全加器结构建模的输入,并完 成仿真。然后参照上述例子编写数据流描述 4 选 1 多路选择器以 及数据流描述 4 位全加器结构建模的输入,并完成仿真。 四、实验步骤: 参考例子代码: 数据流描述的2 选1MUX module MUX2_1c(out,a,b,sel); output out; input a,b,sel; assign out = sel ? b : a; endmodule 2 选1 多路选择器的仿真 `timescale 1ns/1ns module mux_tp; reg a,b,sel;
《DL语言硬件设计》实验指导书 wire out; MUX2_1cm1(out,a,b,sel)://调用待测试模块 initial begin a=1'b0;b=1'b0;se1-1'b0: #53e1=1"b1; #5a=1'b1;se1-1'b0: #5se1-1'b1: #5a=1'b0;b=1'b1;se1=1'b0: #5se1-1'b1: #5a=1'b1;b=1'b1;se1-1'b0: #5se1=1'b1; end endmodule 数据流描述的1位全加器 module full add2(sum,cout,a,b,cin); input a,b,cin; output sum,cout; assign sum a^b^cin; assign cout (a b)l(b cin)I(cin a); endmodule 1位全加器的仿真程序 'timescale 1ns/1ns module adderl_tp;//测试模块的名字 rega,b;/测试输入信号定义为reg型 reg cin; wire sum;//测试输出信号定义为wire型 wire cout; integer i,j; ful1_add2 adder(sum,cout,a,b,cin)://调用测试对像 always#5cin=~cin://设定cin的取值 initial begin a=0;b=0;cin=0; for(i=1;i<2;i-i+1) #10a=i;/设定a的取值 第17页共49页
《HDL 语言硬件设计》实验指导书 第 17 页 共 49 页 wire out; MUX2_1c m1(out,a,b,sel); //调用待测试模块 initial begin a=1'b0; b=1'b0; sel=1'b0; #5 sel=1'b1; #5 a=1'b1; sel=1'b0; #5 sel=1'b1; #5 a=1'b0; b=1'b1; sel=1'b0; #5 sel=1'b1; #5 a=1'b1; b=1'b1; sel=1'b0; #5 sel=1'b1; end endmodule 数据流描述的1 位全加器 module full_add2(sum,cout,a,b,cin); input a,b,cin; output sum,cout; assign sum = a ^ b ^ cin; assign cout = (a & b)|(b & cin)|(cin & a); endmodule 1 位全加器的仿真程序 `timescale 1ns/1ns module adder1_tp; //测试模块的名字 reg a,b; //测试输入信号定义为reg 型 reg cin; wire sum; //测试输出信号定义为wire 型 wire cout; integer i,j; full_add2 adder(sum,cout,a,b,cin); //调用测试对象 always #5 cin=~cin; //设定cin 的取值 initial begin a=0;b=0;cin=0; for(i=1;i<2;i=i+1) #10 a=i; //设定a 的取值