我想用VHDL驅動一個4x16 LCD顯示屏。第一行應該說「FREQ:000 RPM」,其中零表示傳入的8位頻率數據。下一行的數據也不相同,也是8位。我的VHDL代碼如下:如何在VHDL中結合傳入數據和字符?
-- 16 Characters
subtype string16_type is string(1 to 16);
-- 4 string of 16 characters
type message4x16_type is array(1 to 4) of string16_type;
-- Define messages displayed
constant message_home: message4x16_type := ( --123456789
1 => "FREE MODE ",
2 => "PARCOURS ",
3 => "- - - - - - - - ",
4 => " - - - - - - - -");
constant message_info: message4x16_type := ( --123456789
1 => "FREQ: 000 RPM ",
2 => "SPEED: 000 KM/H ",
3 => "DIST: 000 KM ",
4 => "MORE INFO ");
-- Character amount in line
signal character_counter: integer range 1 to 16;
-- Line amount on LCD
signal line_counter : integer range 1 to 4;
然後接着一個狀態機,與國家write_char部分看起來像這樣:
if msg_select = '0' then
aline := message_home(line_counter);
elsif msg_select = '1' then
aline := message_info(line_counter);
end if;
data <= std_logic_vector(to_unsigned(character'pos(aline(character_counter)),8));
一切正常smoothily這樣,但我不能想辦法將頻率數據實現到消息中,就像在C中使用%i一樣。我知道'record'語句,但不知道如何在這種情況下使用它。任何其他實現數據的方式都非常受歡迎。
謝謝你正手。
你的意思是「將頻率數據應用到消息中」是什麼意思?用數字值的ASCII字符串形式替換'000'? –
你知道串連符號'&'嗎? – JCLL
聲明後,您無法修改常量的值。這表明您要麼使用4x16顯示器的隨機訪問功能,要麼創建信號或可變行緩衝器字符串,可以將常量字符串複製到,編輯並隨後寫入顯示器。合成條件的東西需要固定的長度,這就是爲什麼你不能在VHDL中找到C字符串格式。 – user1155120