带有复位和置位端口的D触发器
运行环境 参考前面帖子: VS2012 + modelsim
相关语法功能也请参考前面的帖子。这里只是个人的一个练习实验 分享,有感兴趣的和疑问的欢迎交流
主要函数内容
SC_CTOR(rs_dff){
SC_METHOD(rs_dff_pos);
sensitive<
sensitive<
sensitive<
}
voidrs_dff::rs_dff_pos(){
if(rst_n.read()==false)
{
out_q.write(0);
}
elseif(set_n.read()==false)
{
out_q.write(1);
}
else
{
out_q.write(in_data.read());
}
}
测试文件代码
voidgen_input()
{
wait();wait();wait();wait();
rst_n=0;set_n=1;in_data=1;
wait();wait();wait();wait();
rst_n=1;in_data=1;set_n=0;
wait();wait();wait();wait();
rst_n=1;in_data=0;set_n=0;
wait();wait();wait();wait();
rst_n=0;in_data=0;set_n=0;
wait();wait();wait();wait();
in_data=1;rst_n=1;set_n=0;
wait();wait();wait();wait();wait();wait();
in_data=0;rst_n=1;set_n=1;
wait();wait();wait();wait();
in_data=1;rst_n=1;set_n=1;
wait();wait();wait();wait();
in_data=0;rst_n=1;set_n=1;
}
voiddisplay_variable()
{
cout<<"in_data="<
cout<<"rst_n="<
}
SC_CTOR(tb)
{
SC_CTHREAD(gen_input,clock.pos());
SC_METHOD(display_variable);
sensitive<
sensitive<
dont_initialize();
}
主函数
sc_clockclock("clock",2,SC_NS);
rs_dffD3("Dff3");
D3.in_data(in_data);
D3.out_q(out_q);
D3.clock(clock);
D3.rst_n(rst_n);
D3.set_n(set_n);
tbtb1("tb");
tb1.rst_n(rst_n);
tb1.set_n(set_n);
tb1.clock(clock);
tb1.in_data(in_data);
tb1.out_q(out_q);
//tracefilecreation
sc_trace_file*tf=sc_create_vcd_trace_file("Nand2");
sc_trace(tf,D3.in_data,"in_data");
sc_trace(tf,D3.out_q,"out_q");
sc_trace(tf,D3.clock,"clock");
sc_trace(tf,D3.rst_n,"rst_n");
sc_trace(tf,D3.set_n,"set_n");
sc_start(200,SC_NS);
sc_close_vcd_trace_file(tf);
运行仿真结果如下
当 rst_n = 0 输出 out_q=0;
当 rst_n = 1 set_n = 0 时 out_q=1;
当 rst_n = 1 set_n = 1 时 out_q= indata;
out_q 延迟 indata 半个周期后 与D触发器的时序图一致。