私は多くのハードウェアを扱ってきましたが、そのうちのいくつかは「読み取り専用」または「書き込み専用」のレジスター (または、レジスターへの読み取りまたは書き込みによって異なる機能を備えているため、誰かがそうすることに決めたときに楽しいものになります) reg |= 4;" あるべき値を記憶する代わりに、ビット 2 を設定し、新しい値を書き込む必要があります。読み取れないレジスタからランダムなビットが現れたり消えたりするハードウェアをデバッグしようとするようなものはありません! ; ) 書き込み専用レジスタからの読み取り、または読み取り専用レジスタへの書き込みを実際にブロックする試みはこれまで見たことがありません。
ところで、「書き込み専用」のレジスタを持つことは本当に悪い考えだと言いましたか? ソフトウェアがレジスタを正しく設定したかどうかを確認するために読み返すことができないため、デバッグが非常に難しくなります - そしてドライバを書く人々 2 行の VHDL または Verilog コードで本当に簡単にできる難しい問題をデバッグするのは好きではありません。
レジスタのレイアウトをある程度制御できる場合は、「読み取り専用」レジスタを 4KB で整列されたアドレスに配置し、「書き込み専用」レジスタを別の 4KB で整列されたアドレスに配置することをお勧めします [4KB 以上でも問題ありません]。次に、ハードウェアのメモリ コントローラをプログラムして、アクセスを防止できます。
または、読み取りが想定されていないレジスタが読み取られている場合、または書き込みが想定されていないレジスタが書き込まれている場合は、ハードウェアに割り込みを生成させます。ハードウェアは他の目的で割り込みを生成すると思いますか?
さまざまな C++ ソリューションを使用して行われた他の提案は問題ありませんが、レジスタを直接使用することを意図している人を実際に止めることはありません。ハードウェアの誤用から保護するためのハードウェア。