Interoperability of MATLAB with other programming languages
Overview
While MATLAB is a widely used platform during the research phase to prototype algorithm, several product development lifecycles involve working with frameworks that support other programming languages like C/C++, Java, Python or SystemVerilog.
Code generation is fundamentally changing the way engineers work in semiconductor industry, especially while working on 5G and other complex wireless design environments. Instead of writing thousands of lines of code by hand, engineers are automatically generating production code to increase productivity, improve quality, and foster innovation.
Most product development teams spend a significant amount of effort working on redesigning the algorithms and systems in languages supported by those frameworks either due to some inherent benefits they offer or due to legacy reasons. MATLAB offers a 2-way, flexible interface with other programming languages that will help developers maximize reuse and minimize risks and errors as designs transition from research to development and from one environment to another.
In this webinar, you will learn how MATLAB can be used to enhance product development workflows, be it software or hardware.
Highlights
- Generate C/C++ Code for the 5G functionalities
- Integrating existing code directly into MATLAB for simulation and prototyping
- Access MATLAB algorithms easily from external IDEs
- Packaging MATLAB algorithms for scalable deployment in C/C++/Python/Java interfaces
- Integration and co-existence of MATLAB with hardware IC development tools
About the Presenters
Uvaraj Natarajan, Senior Application Engineer, MathWorks
Uvaraj is a Senior Application Engineer in MathWorks, focusing on the 5G/ LTE/ WLAN/ Wireless communication. Prior to MathWorks, he has worked with Cisco Systems where he worked on Self-Optimizing Networks(SON) for the 5G/ LTE market and developed expertise on end-to-end LTE networks working closely with mobile operators across the globe. He has industry expertise on LTE ENB protocol stack development, LTE PHY development. He has also worked at Centre for Communication Systems Research, UK on cognitive radios, relay systems, LTE-A, CoMP systems. Uvaraj holds a Master's degree in Mobile and Satellite Communications from University of Surrey, UK and BE in Electronics and Communications from Anna University, India.
Vidya Viswanathan, Senior Application Engineer, MathWorks
Vidya Viswanathan is an application engineer at MathWorks India specializing in design and implementation of digital signal processing applications. She works closely with customers across domains to help them adopt MATLAB® and Simulink®. Her areas of interest include FPGA and ASIC design, image processing, and computer vision. Vidya holds a bachelor's degree in electronics and communication engineering from M. S. Ramaiah Institute of Technology and a master's degree in communication and signal processing from Indian Institute of Technology Hyderabad.
Recorded: 19 May 2021
Thank you so much, everyone for joining this talk today on Interoperability of MATLAB with other programming Languages. I'm Uvaraj Natarajan and I'm from the Application Engineering team in MathWorks focusing on wireless communication systems. Along with me, I have my colleague Vidya Viswanathan. She is also from the Application Engineering team focusing on SPC HDL and so on. We welcome you to this talk.
In case you have any questions about the content being presented, I request you to post the questions in the Q&A window. We will take a couple of minutes at the end of the talk to address these questions and also follow up with you on the queries. In case you are facing any issues with the logistics, you can reach out to us in the chat window. During the webinar that would be a couple of poll questions that would be popping up in your screen. I request you to keep a look at the poll questions towards the right side of the Webex window and please answer them. With this, let's get started.
In this session, I will highlight some of the different ways you can share your MATLAB applications; ranging from generating the C/C++ code directly from MATLAB or generating library files and creating shareable applications or integrating your MATLAB algorithms to large scale applications and other programming languages. And also integrating and coexisting with your MATLAB and other hardware IC devices and so on.
So the next question is why engineer deploy MATLAB programs today? Before we even tackle the subject of sharing the MATLAB programs, algorithms, and applications, lets us understand the reason why engineers want to share what they have created in MATLAB. There are four main reasons.
In the first case, you want to share her work in the form of MATLAB programs as tools that users do not have MATLAB or use MATLAB on a daily basis. And the very popular re-sentence to integrate your MATLAB program either in the form of standalone applications or Web apps, or even Excel add-ins within your applications. You also want to distribute the generated code or artifacts royalty-free without having to worry about the licensing requirements. Finally, you want to ensure that the shared application is encrypted with the particular intellectual property rights. Right .
So with that note, I have classified the today's talk into four different buckets. The first one is generating C/C++ code and sharing with your team or using it in your C based framework. The second one is creating a standalone application and shared libraries using MATLAB applications. The third one is working with the other programming languages, that is coexistence of MATLAB with other programming languages like C/ C++, Java, Python, .Net, and so on. And the fourth bucket is hardware deployment, taking the MATLAB code into deployable form that you can deploy directly into the app.
Let's first kick start into the first bucket, which is generating C/C++ code. Now the question is, what you can really use MATLAB code form that are primarily for main use cases why engineers translate the MATLAB into C/ C++ code. The first one, as you can integrate MATLAB algorithms with existing C/C++ environment, such as a custom simulator or using some source code, or even static libraries. By generating mixed files and running them in place of MATLAB code, you can possibly accelerate your MATLAB algorithms and so on.
You can also prototype your MATLAB algorithms on desktop as standalone executables by creating the exe files and that can be directly used. Finally, you can implement C/C++ code on embedded processors or even hand of the software engineers, your teammates or so on, so that they can use it by integrating that into your custom projects or your own C/C++ based framework. Either it can be a development framework, or a testing framework or a maintenance framework.
So some of the examples of MATLAB coder; so we have customers across the globe who are using the coder product to automatically generate the C/C++ code for various applications. For example, they have used it for integrating it into their hardware or custom workflows but also for implementing that into the algorithms and embedded processors and so on. So there are various use cases which are available on the website to have a look.
Coming to the challenges with the manual translation of your code. So what are some of the challenges you face in manually translating your MATLAB into C/C++? With this manual approach, once you're burning up your algorithms in MATLAB, either you or someone else manually rewrite the same design and C. Because these two languages are inherently different. There are many functional and behavioral differences introduced in your design if that is.
The primary problem with these approach is, you have to maintain two separate implementations that are not automatically in sync with each other. If requirement did change during the development process, which is almost going to happen always later, you keep on changing the requirements and reiterate your algorithms and when it require. It's quite inefficient to go back and modify your C code. Then test it all over again, and ensure that the functionality is the same as the original MATLAB algorithm, the original code which is redundancy.
Coding errors are usually introduced during the manual translation process leading to longer testing times and no guarantee that bugs are introduced not one that are brought. So finally, the entire process is time consuming and costly as it's expensive to maintain not only separate algorithms in two different languages, but also separate based branches in C/C++ as well as in MATLAB. That may not be getting implemented in your hardware. So that's a redundant work which you'll be doing.
So with automatic translation of your MATLAB algorithms to C, you spent much time waiting for debugging low-level C/C++ code and more then developing and tuning you algorithms. Once you're happy with your MATLAB code, you can start generating the MEX file automatically and bring it back to MATLAB to either verify the compiled execution or to simply speed up your code in some case. From that, you can generate c-code or a source code executable or even library automatic. With this approach, you may need a golden reference in MATLAB and get to see C/C++ more much faster by automatically generating that.
Having a single reference make it much easier to make changes to the requirements. You can also get to test it more systematically and thoroughly to account for more real world scenarios as per all. The algorithm you create probably won't be as simple as the example we just saw. To successfully translate more complex and real world algorithms, we recommend a three-step workflow for use that is with the MATLAB.
The first step is to prepare your MATLAB algorithm for code generation. Here you examine and modify your original MATLAB algorithm, introduce implementation constraints that are needed for C, and use the MATLAB language feature supported for the code generation. So the second step is to test if the MATLAB code you just modified our created is ready for code generation using the default settings. If success, the MATLAB coder will generate the MEX file. And if it's failing, you will have to reiterate with the previous to get your algorithm to a point where you can successfully generate a MEX file from your MATLAB algorithm.
Once you've got past the second step, you can generate either C/C++ source code or keep the MEX function from the previous step. You can iterate with the step 1 and step 2 to further modify your MATLAB code. Optimize, you can also optimize the generated C/C++ code for loop fill memory and speed and so on. You can also optimize the MEX function for performance action.
Let's see a quick example in MATLAB on how this workflow is designed. I'm taking an example of error vector magnitude measurement in 5G, which is actually a part of the 5G tool box. And this example is a shipping example, which simulates the complete 5G transmitter and receiver parts. So you'll be generating a standard specific waveform, which is actually a 5G waveform and completely built into the transmitter blocks, each and every block of the transmitter and the receiver part, add channel to the right and so on. So the receiver said again, you have the complete implementation like the channel estimation in all the equalizes and various equalized quadrature which are part of the 5G toolbox.
So once you're done with building up the system, we'll measure the error vector magnitude for the design system. For this, I have written a function called EVM so which calculates the error vector magnitude of the system. And this is actually a supporting function which we are going to generate the code for, a C code basically. So I'm just going to do an application called MATLAB coder. So this is a user-friendly application which is basically used for code generation.
So I'm just giving the function name which is the entry point function, which is the EVM function we just saw, which is calculating the error vector magnitude. And then going to the next step, here to give the test bench. So the example, which is calling the EVM function here is the best bench for that. And once you do that, it automatically recognizes the input for that function, which will be used and the data type and so on. On good but here is the system will also run check for error or issues and you'll find out all the issues in the quarter before generating the C code actually. So this will also help you identify various prototyping or various errors and rectify them. Finally, you will get the output once the errors are rectified which is the real functionality of this particular function which we are in that for.
So once we are done with the error checks, I'm just clicking the Next button that I go. And specify the date actually that I want the source code, which is C/C++ code, or even I have the flexibility to select the languages, whether it's C or C++. Even I have the flexibility to choose various hardware boards. So based on your selection, the optimization of the code will be done based on that. And we also have further settings of selecting the too chain. So I don't select the tool change because I'm running it in my language.
We also have the flexibility to optimize the generated code for speed and for memory, various settings for memory. You can also change the appearance of code as for your coding standards, you have got your organization's coding standard, you also have flexibility for hardware and even standard compliance, standards can also be selected.
Once that is done, I just click on the generate button, which is basically generate the C code equivalent of the error vector magnitude. So it's building the system and once the system is built, you will get this code will be output. So you will also see a nice report which will explain about what has happened as a part of the generation process. So I'm just clicking on the report that you will find a report page opening and you will have the output of that and you have, let's say you will have the source code files, which is generated basically by the system. And we also have a summary of what has happened there and how the code is and. So this is the equivalency code for the MATLAB function which is generated.
So you can also trace the code as you can compare it line by line with the MATLAB and C implementation and see how the code as translated from MATLAB and C, and so on. So this will also help you to maintain the code very easily. So you just maintain it in MATLAB and generate code in C, it directly takes care of all. You see the two lanes of MATLAB code on the right is translated into many lines of C code as for the coding standards which we have.
You also can edit the C code which is generated directly in MATLAB. We also have the flexibility to export the report to form file and share it with your team or even package the code as a flat hierarchy or as a flat wave. So these are the various options which you have in the MATLAB coder. So once you're done with that, you finally see that your source code is generated successfully. And you can directly open the folder that the source code resides.
So this is the folder and you have the evm.c file. The header files, the corresponding header files not only supporting files which will basically help you in generating this code, as well as the other supporting functions. So basically, this file is filing corresponding to that. And this can be openly shared with your team to take it forward or you can integrate it with you C based 2 environment.
So basically supported MATLAB language features are a broad list. So the supported language which is quite broad and as design engineers, you will have to make use of these features in your algorithms. Understand this and make use of this. Some of the supported language features into all the are like all the standard matrix operations which you would need to use it, or all the data the various data types which are supported. You also have different programming control structures such as loops, while loops, switch cases, and structures, and so on.
And our list of functions and toolbox supporting C/C++ code generation is growing fast. So we have dedicated team working on writing functions which are basically C/C++ compatible. And as of the current list, we support 35 toolboxes and over 3,000 functions in MATLAB which are supported directly for the code generation.
OK. Coming to the next section, which is creating standalone application and shared libraries. Within MATLAB environment, you can create programs to perform data analysis and visualization, develop and integrate algorithms, and create complex application that includes graphical user interface. If you want to deploy what have developed, you have two options basically. In the first, you can use MATLAB Compiler SDK to deploy our analytics on Production Server or integrated algorithm as a shadow library with application deployment and Python or C or C++, or Java, .net based.
On the other hand, if you are looking to shadow programs as standalone applications or provide them as an add-ins, or even generate the application to run the hadoop spark. Then you can use the MATLAB Compiler to generate the artifacts of your choice. Please note that the user will need to run MATLAB Runtime, which is actually set up libraries that are freely available from mathworks.com. And these libraries are supporting libraries for the generated code or the libraries.
The main idea here is to share the generated code or application with people who do not have MATLAB access. You may want to share the work with the team members or colleagues outside your team but within your organization. So those are certain requirements you normally have. You may also want to share with suppliers or clients, of collaborations that need those programs to accomplish a second task. So all those can be done without hesitance.
The benefit here is, the receiver does not need a MATLAB license, it is a royalty-free distribution. And I think, linked with the is you're on your IP the MATLAB code are protected, since you have created a master application or library and you are just sharing the library not your source. Creating a library to incorporate your algorithms into custom application is basically divided into three steps. The first one is to develop the algorithm. So you develop the algorithm using MATLAB. So this can be your custom algorithm, you can develop it around the state and reiterate it and finish the development process.
Once you're done, you can package the developed algorithm in two libraries which is shared. So this can be done using MATLAB compiler SDK product. Once you're done with packaging the library, you can integrate into your own application of framework. For example, if you are using a C/C+ framework you can basically take the dll or library files and integrate to that. But if you are using Java, then you can take the jar files. Or if you are using Python, then you can create Python library with the py extension and use it to your Python file.
Let's quickly jump into the MATLAB and run and see a demo of the same functionality of error vector magnitude. So earlier we saw code generation for the error vector magnitude functionality using MATLAB coder. Now we will see the compiler use case for the same function, which is the evm function, which basically calculates the error vector magnitude of a 5G system.
So now we again go to the Apps and we take compiler. So there are various compiler products which are available starting from application compiler, Hadoop compiler, library compiler, production and also the production of a computer, and so on. So these are for targeting different use cases and applications.
So we are creating the libraries. We select the library compiler, and you have the list of supported formats. That's a C, Java, or Python, you have a list of formats. So now let's select C here and click on the Add function button. Here I add the function of the MATLAB file, which is basically used for generating the library. So you have the flexibility to add the runtime downloaded from the web directly when you are installing it are included in the package which you're using.
You also have flexibility to do other settings. And you also have flexibility to add various information because this is going to be a package a library, or a piece of software which are going to share it. You need to give certain proprietary information for your sake. So either name, or company details. So all those things can be provided here, which will become a part of the package which you are building.
And so once you're done with that, there are also various other settings and options once you're done with that. You can package the function into a library. So once you click on the package, it creates the binaries and you will get the binaries once instant. Yes. So it automatically opens the folder and you will see a three folder structure with the library. So for redistribution has the library, which is in an application format and which you can install it in your system. So this basically takes care of installing the library in your system, that can be important in your function. Or you can get the source code, you know that library files directly; the dll, the lib files directly and you can use that plug-in that in their system.
And good part is, you have a nice documentation generator for each and every work which you do, and this explain what are the prerequisites, how to compile the C. If you have your own C program, how to compile that along with the library which you have created. Or even executing the C driver applications and so on. So this is like a self-explanatory folder, which you can share directly with your team or others.
So now coming to sharing programs standalone application. So we saw how to package it as a library. Now we will see another example how to package that as an application, which can be shared. For that I take another example, which is actually a sort out analysis. So here, I have a function a MATLAB file analysis runtime, which a bit of an error rate, which actually creates an application-- which opens an application that I can do the xls file, which could be used for analysis, which is the input of the function.
And so once that is imported, this function basically does an analysis of various components of this solar system. So this uses the files and basically does the analysis of the system. So this particular solar analysis of file which we have, we will try to generate and thought that and see how you can take it out of my account. For that, I go to the apps window and I select the Application Compiler here. So earlier if you remember, we have selected the library compiler. Noe we select the Application Compiler which is used to build a standalone application audience.
So once they open this, you see another place. So this is something similar to the old application that you can add your main file. So here, our main file solar analysis MATLAB file. So we just select that and you also have various other options which you can provide as for your convenience. So this also automatically import the dependency files. It say, the package is automatically here. So you need not worry about all those things.
And it also says know what are the various input output functions or files which are required for this. So once you're done with all the configuration of application, you can just package the data into the excel. So I'm just saving it and I'm trying to package it. Packaging is done I got the folder open. So you see my app installed as .exe, which is the exe which is generated. So this is something that you can share for any with anyone who is having a Windows application. You can share this exe. And they will be able to be easily open that and run it and install it in their windows machine. And you will see that Solar Analysis as another application which you have in your windows machine.
And when you click that, it just open the application. You can again, select the list of xls files that you want to do analysis for. The ones who selected directly, the software directly imports that and you can do the same analysis that you have done in the MATLAB environment as a standalone executable. So this becomes a piece of software in your machine.
So basically this is an example this is applicable for any application for example, it can be a wireless application, 5G application, At application, or various other applications, any signal processing applications. Any applications can be packaged and created and the shared with you. Here is a table that compares MATLAB code and MATLAB Compiler. So you can choose the right product for you. One of the primary distinctive that the MATLAB coder will generate readable and portable C/C++ code that can be compared a standalone along with your C/C++ framework without any additional libraries.
The MATLAB Compiler on the other hand generates executables are the library files that require them to run also MATLAB coder supports only a subset of languages for code generation that's suitable for numeric algorithm development. While MATLAB Compiler supports pretty much the entire MATLAB languages and toolboxes including graphics and visual issues. The output of both product can be deployed royalty-free and it's something that you can. And this is like a main primary differences between those ones.
With this, we come to the end of the second bucket. So now let's go to the third part of today's talk, which is Working with Other Programs Languages. MATLAB is a very flexible language and you can call code written in other languages within MATLAB and so on. So the C/C++ interface support for MATLAB was updated on early 2019 that you can now call up C++ libraries directly from MATLAB. And you can also build a MATLAB interface to the library an algorithm from the source code files that contain complete implementation for the libraries.
You can also execute Python functions, although which is out of process to avoid library conflicts and so on. So you can also call MATLAB from within other languages. So if you have some of the language running in your system, you can just use the API functionality and you can directly call MATLAB from the other language. Active deployment and development for all of the languages that happening and you will see a lot of functionalities coming up.
And these are some examples of calling other languages from MATLAB. For example, if you want to call C, you can use a MEX function, or even load libraries for importing a C shared libraries. And also use the clibgen function. For .NET, you can use the .net interface. For Java, you can use Java interface and for Python, you can use the py interface. So this can be directly-- these functions can be activated. And you can call these languages directly and save them.
MATLAB also auto converts core Python Types on Passing. So when you have a certain variable for example, you have x is equal to 9. And a is equal to py.math.sqrt of x basically executes the square root. It basically invokes the Python and it calls the Math functionality which is actually a library of mathematics functions in Python. And the operation which you want to perform is the square root of x, which is 9. So basically if you see the plus of a, you'll see does it double.
So basically the conversion of Python has taken place and the scalar double in MATLAB is basically the floating Python. Char in MATLAB is basically the string on Python. Cell array is actually corresponding to the Tuple in Python. So basically, you have various types of MATLAB, which is very compatible with the Python. And you can also call MATLAB from Python directly using the MATLAB engine. So what happens here is you can import the MATLAB engine. So the window, which I have is the command prompter that I have opened in Python, and just imported the MATLAB engine API. And I just invoke the MATLAB when the engine is imported. And I can use all the functionality of MATLAB whatever you use in your command from, you can basically use any Python interface.
So this is basically invoking MATLAB from your Python. So you can invoke it from some other languages as well. When it comes to C/C+, MATLAB game support calling of MATLAB engine from C/C++. So as we saw in the previous related to Python, you can also use the MATLAB engine and call MATLAB directly from the C/C++ interface.
On the other hand, you can use MATLAB code in your C++ using MATLAB coder. So you can generate the C/C++ code as we saw earlier in this talk. Or you can also compile that in the library using the MATLAB Compiler. On the other hand, can you see C/C++ code inside MATLAB. This is the other way around that. You can take the C/C++ or convert it into makes our library and then import it into MATLAB and then use it directly inside it.
So it's basically a two way handshake depending on your project requirements and use cases, you will be able to easily use the functionalities as per the need. OK so with that, we come to the end of the third part. So I have a poll question though, this is an interesting question. And I request you to have a look at your polling station and cast your vote there. The question is, what are your current area of interest and I would request you to have a look at it.
Thank you so much for participating in this poll and letting us know what your current areas of interest are. And I would also like to thank you Uvaraj for giving an overview of how MATLAB can be used with the various different development environments; With C/C++, Java, or .NET, and how it can work alongside with all those different environments. What we will be not talking about specifically is how MATLAB can be leveraged for hardware development as well as on the verification side.
So for example, if we were to consider the development of a 5G system, so we would typically start off with having a reference algorithm for your 5G system, which would be in line with the specifications dictated by the standardization organization. And 5G toolbox can serve as a good starting point when we want to create these 5G reference algorithms. But typically when we look at the hardware development platforms, we would basically be representing your design on the test in the form of Verilog or VHDL RTL code. And this would be tested with a set of stimulus as well as a scoreboard if you are using verification methodologies like OVM and UVM.
So with the help of MATLAB, you can create this entire framework of having your reference algorithm, tested with standard compliant forms from 5G toolbox. And you can also use different visualizations as well as the different matrices to modify and verify your results. And the exact same setup can be replicated in your SystemVerilog environment without having to rewrite or redo this whole framework. So what I mean in this regard is, let's say you have your 5G waveform generation done in MATLAB, the same thing can be exported out of MATLAB in the form of a SystemVerilog module, which can then be plugged into any system Verilog base similar simulator or OVM framework.
And this is done with the help of HDL Verifier, which basically uses the direct programming interface to connect the C code that gets generated out of these MATLAB algorithms and wrap it in SystemVerilog so that it can be used in these SystemVerilog based simulators. So once that is done, you can now independently run your simulations or perform your verification in your EDA, environment or your SystemVerilog simulator. And now you can be assured that whatever stimulus that you're actually passing into, your beauty is exactly what you would see in MATLAB, which in this case of 5G system is in accordance to the standard.
So this is not just only for the stimulus. But if we were to extend this to a much larger set of systems, so your typical reference algorithms would be written in floating point code, and would be written more keeping in consideration the processing of the entire frame. So with the introduction of wireless HDL toolbox, we now have the same systems that as your 5G algorithms represented in a more hardware friendly fashion. And this hardware friendly representation of 5G algorithms can also be used and fairly plugged into your verification environment through the same method of SystemVerilog power generation.
So what I mean is that it's not just only the sequence of the stimulus. You can also have these reference algorithms being plugged into your verification environment in the form of a scoreboard, and all of this would be done in an automated fashion. So this makes it much easier for you to collaborate with your design team that come up with the algorithm and the hardware that is basically looking at implementation of this on either FPG prototypes or on a silicon.
So with the help of HTML verifyer, you can basically use whatever you have created in MATLAB and Simulink in your verification environment. And this then uses the time required to create test benches. It can also help you have your test benches represented at a much higher level of abstraction so that you can test your system as a whole, and you don't have to worry about individual test factors being set. This entire process of plugging into the system that allows all the UVM environment is done in an automated fashion. And since this basically involves generation of C code, run in SystemVerilog, it can be used in any kind of system environment. And it's not specific to just a particular platform where you can simulate it.
And this framework is not just only limited to digital algorithm IPs as in the case of 5G that we saw. This can also be extended to analog or analog mixed signal systems which can be represented in MATLAB and Simulink. So this is on the verification front, we saw how the same framework of taking things out of MATLAB or interoperability of MATLAB with other environments can help with the IC of verification framework.
Now, let's take a look at how this can be used with respect to hardware design. So again considering 5G system as an example, we have different algorithms represented using 5G toolbox tested with the waveforms that we create, as well as we perform different kinds of verification or visualization of the result. Now, with this particular algorithm or the different algorithms that we have, we can start adding a little more details in terms of the hardware architecture. What I mean by that as you can perform design partitions to understand what would be better suited to be implemented on an FPG fabric or a hardware fabric, and what is best suited for a software kind of an implementation.
You would also have to incorporate into this design that you have created the notion of time and how the algorithm would adopt when we are processing individual samples as opposed to the frames, which is what would typically be done in the simulation environment. And this is where the interoperability between MATLAB and Simulink as a platform can be very handy. Because Simulink inherently has the notion of time built in and is directly related to the sample based processing. And since both of these are very tightly coupled, you wouldn't have to redo the entire process, you can use your MATLAB code to test your Simulink algorithms.
And once you have represented your algorithms in a sample based or considering the sample based on the hardware architectural aspects, you can perform offloading the fixed point conversion directly using the fixed-point Designer that is available, which how to translate both MATLAB code into fixed-point equivalent MATLAB code. Also billing models into an equivalent Fixed-point representation. So these would sort of constitute the steps that are required to make your algorithm more hardware friendly. And then finally with the help of HDL Coder, you can generate synthesizeable Verilog or VHDL code that can then be used in any FPG platforms or services or can be taken down through the basic design workflow.
And we have several customers who have taken this route of using HDL Coder because it saves them time in terms of coming up with a prototype or good quality code. And there are also optimizations that can be done at the model level, which then eliminates the need of re-engineering or redoing the whole code and in the ideal level, which also, of course, saves a lot of time.
And when you use the code that is generated from HDL Coder, ensure that the code is both bit-wise as well as cyclase accurate to what you started off with, which is your MATLAB and Simulink algorithms. And this can also be verified and independently tested in your verification environment using the methods that I just mentioned previously.
So this sort of takes or, is an overview of how MATLAB can be used for your hardware design, as well as the verifications framework. If there are any of these aspects that you would like to understand in a little more detail, we have a poll question that you would see up here in your Webex window. And I would request all of you to let us know in what way we can help you. If you would like to hear-- if you'd like more resources that we can share with you on any of the topics that we covered, we will be happy to do that. We would be happy to have a one on one conversation with you about your specific requirements, and how these tools can be used to improve your development framework.
We also have a set of hands on training that we offer through our different resources, training and learning resources. And if you would also like to work with us to help implement some of the designs that you are looking at, we also have services to be able to enable that. So I request you to just specify an option and we will be happy to follow up with you on this.
OK. So to summarize, we still have one of the ways of taking things out of MATLAB could be through the compiler route, which helps you basically a standalone executables of what you've created in MATLAB environment, which can then be plugged into various different platforms, including your desktop based environment all the way up to a web app server or you different other database and other environments.
If you're working with the different programming languages or environment like C++, Java, Python, you can also explore things out of MATLAB and leverage the MATLAB compiler SDK workflow to be able to directly integrate into those environments. So just look how far MATLAB code you have the option of creating a standalone executable, we also have the option of performing the same thing for Simulink models that you create using Simulink compiler, which basically helps you then execute the simple models or run Simulink model an independent environment.
And finally, we also have a set of generation products that helps you generate a C/C++ code that we saw HDL that I just spoke about. And a couple of other forms of code generation that's also available is the generation of coda code that can be integrated with different GPU platforms, as well as PLC code generation that can also be used. So this sort of summarizes how MATLAB can be basically integrated with the different environments.
Specifically if you're working on the design and development of systems, MATLAB and Simulink can sort the fact, this one unified platform which helps you design the different aspects of your wireless design, starting from the physical design for various wireless standards which are available in the form of a toolboxes or off the shelf modules, for different standards like 5G, NR, LTE, the Wi-Fi series, and so on. To this kind of physical simulation, you can then add the effects of your RF front end and RF nonlinearities, as well as the effects of antenna.
And then finally, instead of just limiting yourself to the simulation environment, we can connect to different prototyping platforms or software defined radio. All test and measurement instruments that can then help you get closer to the implementation on the hardware. And finally, you can leverage the code generation products that I just mentioned about the C/C++ or HDL code to then finally have a standalone version running on an embedded platform.
So I would request you to also give us your feedback on the content that was presented. So please give your input here rate the session on a scale of 0 to 10. And this feedback is really important for us so that we can work on having more relevant content and webinars that are in line with topics that you're interested in. And after this, we will take a couple of minutes to actually look through the questions that have been posted in the Q&A part. If you have other questions, I would also encourage you to please put your questions in Q&A window. we'll take couple of minutes to look through that and we will answer those questions for you.