Coverstion of Matlab code to HDL
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I tried basic examples of MATLAB to HDL conversions like adder and subtractor. Then I tried running this code.
Code
function x = bpsk( ip , N , Eb_N0_dB)
%N = 10 % number of bits or symbols
% Transmitter
%ip = [0 1 0 1 0 1 0 1 0 1] % generating 0,1 with equal probability
s = 2*ip-1 % BPSK modulation 0 -> -1; 1 -> 1
n = 1/sqrt(2)*[randn(1,N) + j*randn(1,N)] % white gaussian noise, 0dB variance
%Eb_N0_dB = 10 % multiple Eb/N0 values
% Noise addition
y = s + 10^(Eb_N0_dB/20)*n % additive white gaussian noise
% receiver - hard decision decoding
ipHat = real(y)>0
% counting the errors
nErr = size(find([ip- ipHat]),2)
x = nErr/N % simulated ber
theoryBer = 0.5*erfc(sqrt(10.^(Eb_N0_dB/10))) % theoretical ber
end
Please help me in writing test bench. I am getting error when I try to validate the fixed point type conversion . It fails giving errors like function call fails.
My test bench is
f = bpsk( [1 0 1 0 1 0 1 0 1 0 ] ,10 , 2)
f= bpsk( [1 0 1 0 1 0 1 0 1 0 ] ,10 , 8)
Please help me for the same.
3 commentaires
Kaustubha Govind
le 6 Sep 2013
Also, you may want to provide more information about the error message, etc.
Bharath Venkataraman
le 18 Oct 2013
The first thing you will have to do is replace calls to the functions like randn, erfc - these are not supported for HDL code generation. Do you really want to generate HDL code for the channel as well? If not, I suggest putting that into the testbench rather than the design. For the testbench, what you need to think about is the span of values that the input can take. Providing a good span of values allws float to fixed conversion to assess what the fixed-point datatype needs to be.
Réponses (2)
Tim McBrayer
le 6 Sep 2013
There are several obvious functions in your code that are not supported for HDL code generation. At first glance, the following are not supported:
- randn (random number generation)
- ^ (exponentiation)
- real(n) (cast to real)
- find
- erfc (complementary error function)
- size (unless the result can be statically determined)
The documentation contains the full list of functions that are supported for HDL code generation. Run this command in MATLAB to open the supported functions table in the doc viewer:
web(fullfile(docroot, 'hdlcoder/ug/fixed-point-run-time-library-support.html'))
0 commentaires
Muthu Annamalai
le 6 Sep 2013
@Neha I would recommend thinking your MATLAB function as a chip-design interface, when you want to generate HDL from it.
Whatever pieces of the MATLAB function don't make sense to go into the hardware, should be generated in the testbench and applied as input to the chip.
So really, in your case, you need to provide both input and RNG values to the function, like,
function x = bpsk( ip , n, N , Eb_N0_dB)
and then you want to compare the output of this function with the theoretical BER in the testbench.
Once you have done this, you can implement 10^(Eb_N0_dB/20) by LUT or using a constant input at function.
Voir également
Catégories
En savoir plus sur BPSK dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!