Mask parameter value is ignored with HDL Counter word length
Show older comments
Hello,
I developed a specialized counter to accept starting count and max count values through inputs. I've made this into a model so I can use model referencing. This seems to work fine.
However, one thing I'm missing is the ability to set the counter's word size independently in every instantiation. This is where a mask would seem to be the solution.
I added a mask with a single parameter: counter_word_length, and set the word length parameter in the HDL Counter to this variable. Now my counter has a mask.
I open the mask for the referenced model and set counter_word_length to 13 (default was 16). The output type of the counter does not change accordingly. It should be ufix13, but it stubbornly remains uint16. The Word length field in the HDL Counter mask shows the correct value of 13 in the indicator field at the right edge of the editable field. Yet still, the output type is uint16.
I have changed this field to "13" instead of the variable and everything works as expected. What am I doing wrong?
I can share the model and a system that exercises the model if the answer to this isn't obvious.
Thanks,
Charles
3 Comments
Andy Bartlett
on 28 Mar 2023
Please share the model
Charles
on 28 Mar 2023
Charles
on 30 Mar 2023
Accepted Answer
More Answers (1)
Jack
on 30 Mar 2023
0 votes
Hello Charles,
Regarding your first question, it sounds like the HDL Counter block is not recognizing the updated value of the counter_word_length parameter from the mask. One possible reason for this could be that the counter_word_length parameter is not properly linked to the HDL Counter block.
To link the parameter to the block, you can try the following steps:
- Open the mask editor for the referenced model.
- Click on the "View/Edit Model Parameters" button to open the "Model Explorer" window.
- In the "Model Explorer" window, locate the HDL Counter block and select it.
- In the "Properties" pane of the "Model Explorer" window, find the "Word length" parameter and click on the "..." button next to it.
- In the "Parameter Properties" window, set the "Data type" to "Inherit: auto".
- In the "Parameter Properties" window, set the "Value" to counter_word_length.
- Click "OK" to close the "Parameter Properties" window.
This should properly link the counter_word_length parameter to the HDL Counter block and set its word length accordingly.
Regarding your second question, you can make the mask parameter non-tunable by setting its "Tunable" property to "false". To do this, follow these steps:
- Open the mask editor for the referenced model.
- Select the mask parameter in the mask editor.
- In the "Properties" pane of the mask editor, find the "Tunable" parameter and set it to "false".
- Save the model.
This should make the mask parameter non-tunable, so that its value cannot be changed during simulation.
I hope this helps! If you have any further questions, please don't hesitate to ask.
6 Comments
Charles
on 30 Mar 2023
Charles
on 30 Mar 2023
Jack
on 31 Mar 2023
If you want to make a parameter tunable through a mask in Simulink, you can try the following steps:
- Create a Simulink mask for the subsystem or block that you want to configure.
- Add a parameter to the mask by right-clicking on the mask and selecting "Add Parameter" from the context menu.
- In the "Parameter Properties" dialog box, set the "Data type" and "Value" fields as appropriate for your parameter.
- Check the "Tunable" checkbox to enable the parameter to be tuned during simulation.
- Click "OK" to save the parameter.
If you find that certain parameters are not tunable even after following these steps, it may be because they are not designed to be tunable by default. In that case, you can try the following workaround:
- Create a copy of the block that you want to configure and place it in your model.
- Double-click on the copied block to open its "Block Parameters" dialog box.
- Configure the parameters as desired.
- Right-click on the block and select "Create Mask" from the context menu to create a mask for the block.
- In the mask, add a parameter that corresponds to the parameter you configured in the "Block Parameters" dialog box.
- Check the "Tunable" checkbox to enable the parameter to be tuned during simulation.
- Save the mask.
With this workaround, you can expose the parameter you want to tune through the mask, even if it is not tunable by default. However, be aware that modifying the parameters of a block copy can affect the behavior of the original block, so use this method with caution.
Charles
on 31 Mar 2023
Jack
on 2 Apr 2023
I apologize for the confusion. It seems like I may have misunderstood your original question.
Regarding your current question, it sounds like you are trying to create and use a masked model in Simulink. The obj.m_data.html code snippet you provided earlier does not seem to be relevant to this issue.
Regarding the issue with the mask parameters being uneditable, it is possible that the parameters have been marked as "locked" or "frozen". To check this, right-click on the parameter in the mask editor window and see if there is an option to unlock or unfreeze it. If not, you may need to modify the mask code to allow the parameters to be modified.
Charles
on 4 Apr 2023
Categories
Find more on HDL Code Generation in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
