SystemC实例一:七段显示译码器
标签:
systemc七段显示码it |
分类: IC设计 |
SystemC实例一: 七段显示译码器
内容摘要:本文给出了SystemC的RTL级的描述例子,实现了七段显示译码器。并给出有关仿真结果及用Celoxica
Agility Compiler编译产生的Verilog输出。
目录:
1、七段显示码原理
2、解码模块seg7
3、测试模块(test_seg7)
4、主程序(sc_main)
5、仿真测试结果
6、模块seg7用Agility
Compiler编译产生的Verilog代码
七段显示管(共阴极)及编码如下图所示
(共阴极编码)
HGFE,DCBA
0 0x3F;
1 0x06;
2 0x5B;
3 0x4F;
4 0x66;
5 0x6D;
6 0x7D;
7 0x07;
8 0x7F;
9 0x6F;
a 0x77
b 0x7c
c 0x39
d 0x4e
e 0x79
f 0x71
二、解码模块seg7
SC_MODULE(seg7)
{
sc_in<sc_uint<4>
> hex;
sc_out<sc_uint<7>
> seg;
void run()
{
sc_uint<7> code[16] =
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x4e,0x79,0x71};
seg.write(code[(int)hex.read()]);
}
SC_CTOR(seg7)
{
SC_METHOD(run);
sensitive << hex;
}
};
三、测试模块(test_seg7)
测试模块产生16个数,激励seg7,并打印出seg7模块解码输出
SC_MODULE(test_seg7)
{
sc_in<bool> clk;
sc_in<sc_uint<7>
> seg;
sc_out<sc_uint<4>
> data;
void run()
{
data.write((sc_uint<4>)0);
wait();
for(int i = 1;i< 16;i++)
{
data.write((sc_uint<4>)i);
cout << hex
<< i-1
<< " "
<< hex
<< (int)seg.read()
<< endl;
wait();
}
cout << hex
<< 15
<< " "
<< hex
<< (int)seg.read()
<< endl;
wait();
}
SC_CTOR(test_seg7)
{
SC_THREAD(run);
sensitive << clk.pos();
}
};
四、主程序(sc_main)
int sc_main(int argc,char *argv[])
{
sc_signal
<sc_uint<7>
> seg;
sc_signal
<sc_uint<4>
> hex;
sc_clock clk("clock",10,SC_NS);
seg7 s1("seg7");
test_seg7 t1("test");
s1.seg(seg);
s1.hex(hex);
t1.clk(clk);
t1.data(hex);
t1.seg(seg);
sc_start(200,SC_NS);
return 0;
}
五、仿真测试结果
// SystemC module: 'seg7'
module seg7 ( hex, seg );
endmodule

加载中…