Я уверен, что он присваивает что-то z
. Проблема в том, что вы пытаетесь присвоить слишком много z
.
Оператор assign
представляет собой аппаратное обеспечение, которое в этом случае управляет wire
z
. Итак, вы ведете z
4 раза параллельно от 4 отдельных кусков оборудования. Если хотите, у вас короткое замыкание. (Помните, что Verilog является аппаратным обеспечением. Вы проектируете аппаратное обеспечение здесь, а не написание программного обеспечения. Если вы назначаете провод из более чем одного места, вы коротко замыкаете выходы некоторых кусков оборудования.)
Я замечаю, что есть input [2:0] op
. Это выглядит как домашнее задание для меня, и я думаю, вас попросили разработать ALU. ALU - это кусок аппаратного обеспечения (комбинационная логика в этом случае), который может выполнять различные операции на своих входах (его операнды), которые в этом случае являются a
и b
. Какую операцию, которую он выполняет, должен быть выбран другим управляющим входом, который в этом случае почти наверняка должен быть op
.
Итак, вам нужен некоторый код, который проверяет op
и диски z
либо a+b
, a-b
, a&b
или a|b
. Очевидная конструкция мне для этой работы является case
заявление:
case (op)
3'b000:
z = // some expression, eg a + b, it depends on what op code 000 is supposed to mean
3'b001:
z = // some other expression here
// etc etc
default: // perhaps...
z = // ...something to drive z if none of the other branches are used
endcase
case
заявление должно идти внутри always
блока. Поскольку я подозреваю, что это домашнее задание, я не буду кормить вас ответом, я позволю вам разобраться, как это сделать.
Наконец, я вижу, что op
имеет ширину 3 бита. Это говорит о том, что ALU выполняет более 4 различных операций. Я также вижу, что есть выход ex
, который, вероятно, должен что-то сделать.
Я [положил задержку после установки ввода] (http://codepad.org/xCv3b5N8), и кажется, что он работает хорошо. Пожалуйста, напишите [Минимальный, Полный и Подтверждаемый пример] (http://stackoverflow.com/help/mcve). – MikeCAT