Email: bknpk@hotmail.com Phone: +972-54-7649119


V

 

In this work I show how to build a reference model in systemc using queues, from C++ STD.

  1. Link to the main page of this work. This page explains the DUT used in this project.

  2. The DUT is a complex multiplier. For a given two complex numbers, their complex multiplication is calculated. All numbers are represented as two-dimensional Cartesian coordinate.
    (a+jb) x (c+jd) = (ac - bd) +j(ad + bc)
    The algorithm used to calculate the complex multiplication is as follows:
    P=c x (a-c), Q=a x (c+d), R=b x (c-d)
    (P+R) + j(Q-P)

  3. But instead of using four multipliers only three are used.
    Multipliers consume more resources then adders and subtracters, so this design may be smaller in area than a regular one (using four multipliers).

  4. The inputs are 8 bits and the output is 14 bits. Sign extension is performed on the input, before calculating the output.
    The combinatorial code is shown below:

      ...
    1.   void summ_p() {
    2.     sum_p.write((a.read().range(7,7), a.read()) - (b.read().range(7,7), b.read()));
    3.     sum_q.write((c.read().range(7,7), c.read()) + (d.read().range(7,7), d.read()));
    4.     sum_r.write((c.read().range(7,7), c.read()) - (d.read().range(7,7), d.read()));
    5.   }
    6.   void mull_p() {
    7.     mul_p.write(cq.read() * sum_pq.read());
    8.     mul_q.write(aq.read() * sum_qq.read());
    9.     mul_r.write(bq.read() * sum_rq.read());
    10.   }
    11.   void out_p() {
    12.     s_oa.write(mul_pq.read() + mul_rq.read());
    13.     s_ob.write(mul_qq.read() - mul_pq.read());
    14.   }
    15. ...

  ...


Search This Site


Feedback This Site




new pages on this site