Download presentation
Presentation is loading. Please wait.
Published byBarry White Modified over 6 years ago
1
Chapter 3 : Combination and Sequential Circuits Modeling
2
SC_MODULE SC_MODULE (module_name) {
// declarations of ports : input, output and inout // Declarations of signals used in inter-process // Communication // Process method declarations // Other (non-process) methods // Child module instantiation pointer declarations // Data variable declarations SC_CTOR (module_name) { //Child module instantiations and interconnections SC_METHOD (process_method_name); // Sensitivity list for process SC_THREAD (process_method_name);
3
Combination Logic : Single Process
SC_MODULE (mac) { sc_in<int> a, b, c; sc_out<int> sum; void proc_mac() { sum = a * b + c;}; SC_CTOR(mac) { SC_METHOD(proc_mac) sensitive << a << b << c; } };
4
Combination Logic Multiple Processes
SC_MODULE (mult_procs) { Sc_int<bool> source; Sc_out<bool> drain; Sc_signal<bool> connect1, connect2; void mult_procs_1() { connect1 = !source;); void mult_procs_2() { connect2 = !connect;}; void mult_procs_3() { drain = !connect2;}; SC_CTOR (mult_procs) { SC_METHOD (mult_procs_1); sensitvie << source; SC_METHOD (mult_procs_2); sensitvie << connect1; SC_METHOD (mult_procs_3); sensitvie << connect2; } };
5
Sequential Logic Example
SC_MODULE (count4) { //sc_in_clk sc_in<bool> sc_in_clk clk; sc_in<bool> rst; sc_out<int> cout; int curValue; void proc_mac() { curValue = rst ? 0 : curValue + 1; cout = curValue;}; SC_CTOR(mac) { SC_METHOD(proc_mac) sensitive_pos << clk << rst; //async reset sensitive_pos << clk; //sync reset } };
6
Port Read and Write Issues
Code SC_MODULE (xor) { sc_in<sc_uint<4> > bre, sty; sc_out<sc_uint<4> > tap; void proc_xor() { tap = bre ^ sty;}; SC_CTOR (xor) { SC_METHOD (proc_xor); sensitive << bre << sty; } }; Compiler error error C2678: 二元運算子 '^' : 找不到使用左方運算元型別 'sc_in<T>' 的運算子 (或是沒有可接受的轉換) with [ T=sc_dt::sc_uint<4> ]
7
Port Read and Write Issues (cont.)
Code SC_MODULE (xor) { sc_in<sc_uint<4> > bre, sty; sc_out<sc_uint<4> > tap; void proc_xor() { tap = bre.read() ^ sty.read();}; tap.write(bre.read() ^ sty.read()); SC_CTOR (xor) { SC_METHOD (proc_xor); sensitive << bre << sty; } }; Suggestion Explicitly use port’s read and write method
8
Process Function Call No hierarchy Sensitivity List
Processes can’t call other processes directly Sensitivity List
9
Process : SC_METHOD vs SC_THREAD
void full_adder::proc_full_adder() { sum = a ^ b ^ carry; co = (a & b) | (b & carry) | (carry & a); } SC_THREAD while (true) { wait();
10
Process : SC_THREAD example
void blah::proc() { while (true) { if (mem_ready) { tdata.range(7,0) = data8.read(); wait(); tdata.range(15,8) = data8.read(); tdata.range(23,16) = data8.read(); …. } …
11
Process : wait and wait_until
No argument Process will be reactivated when certain variables, specified in sensitivity list, changes Wait_until() Need argument(s) Prcoess will be reactivated when expression is true Example // now wait for ready signal from memory // controller wait_until(mem_ready.delayed() == true);
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.